annotate variant_effect_predictor/Bio/Root/Err.pm @ 0:21066c0abaf5 draft

Uploaded
author willmclaren
date Fri, 03 Aug 2012 10:04:48 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1 #-----------------------------------------------------------------------------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2 # PACKAGE : Bio::Root::Err.pm
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
3 # AUTHOR : Steve Chervitz (sac@bioperl.org)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
4 # CREATED : 22 July 1996
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
5 # REVISION: $Id: Err.pm,v 1.15 2002/10/22 07:38:37 lapp Exp $
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
6 # STATUS : Alpha
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
7 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
8 # For documentation, run this module through pod2html
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
9 # (preferably from Perl v5.004 or better).
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
10 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
11 # Copyright (c) 1996-8 Steve Chervitz. All Rights Reserved.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
12 # This module is free software; you can redistribute it and/or
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
13 # modify it under the same terms as Perl itself.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
14 # Retain this notice and note any modifications made.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
15 #-----------------------------------------------------------------------------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
16
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
17 package Bio::Root::Err;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
18 use strict;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
19
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
20 use Bio::Root::Global qw(:devel $CGI);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
21 use Bio::Root::Vector ();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
22 use Bio::Root::Object;# qw(:std);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
23 use Exporter ();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
24
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
25 use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
26 @ISA = qw( Bio::Root::Object Bio::Root::Vector Exporter );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
27 @EXPORT = qw();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
28 @EXPORT_OK = qw( %ERR_FIELDS @ERR_TYPES &format_stack_entry &throw &warning);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
29 %EXPORT_TAGS = (
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
30 data => [qw(%ERR_FIELDS @ERR_TYPES)],
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
31 std => [qw(&throw &warning)]
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
32 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
33
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
34 use vars qw($ID $VERSION);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
35 $ID = 'Bio::Root::Err';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
36 $VERSION = 0.041;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
37
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
38 %Bio::Root::Err::ERR_FIELDS = (TYPE=>1, MSG=>1, NOTE=>1, CONTEXT=>1,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
39 TECH=>1, STACK=>1 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
40
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
41 @Bio::Root::Err::ERR_TYPES = qw(WARNING EXCEPTION FATAL);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
42
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
43
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
44 ## MAIN POD DOCUMENTATION:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
45
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
46 =head1 NAME
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
47
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
48 Bio::Root::Err - Exception class for Perl 5 objects
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
49
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
50 =head1 SYNOPSIS
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
51
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
52 =head2 Object Creation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
53
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
54 B<Bio::Root::Object.pm> is a wrapper for Bio::Root::Err.pm objects so clients
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
55 do not have to create these objects directly. Please see
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
56 B<Bio::Root::Object::throw()> as well as L<_initialize>()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
57 for a more complete treatment
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
58 of how to create Bio::Root::Err.pm objects.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
59
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
60 use Bio::Root::Err;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
61
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
62 $err = Bio::Root::Err->new(-MSG =>"Bad data: $data",
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
63 -STACK =>[\caller(0), \caller(1), ...],
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
64 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
65
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
66
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
67 To use the L<throw>() method directly:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
68
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
69 use Bio::Root::Err (:std);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
70
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
71 throw( $object_ref, 'Error message', 'additional note', 'technical note');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
72
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
73 The C<$object_ref> argument should be a reference to a Bio::Root::Object.pm.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
74
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
75 See also L<the USAGE section | USAGE>.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
76
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
77 =head1 INSTALLATION
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
78
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
79 This module is included with the central Bioperl distribution:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
80
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
81 http://bio.perl.org/Core/Latest
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
82 ftp://bio.perl.org/pub/DIST
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
83
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
84 Follow the installation instructions included in the INSTALL file.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
85
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
86 =head1 DESCRIPTION
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
87
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
88 A Bio::Root::Err.pm object encapsulates data and methods that facilitate
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
89 working with errors and exceptional conditions that arise in Perl objects.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
90 There are no biological semantics in this module, as one may suspect from its
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
91 location in the Bio:: hierarchy. The location of this module serves to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
92 separate it from the namespaces of other Perl Error modules. It also makes it
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
93 convenient for use by Bio:: objects.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
94
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
95 The motivation for having an error object is to allow
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
96 Perl 5 objects to deal with errors or exceptional conditions that
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
97 can arise during their construction or manipulation. For example:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
98
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
99 (1) A complex object can break in many ways.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
100 (2) Tracking errors within a set of nested objects can be difficult.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
101 (3) The way an error is reported should be context-sensitive:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
102 a web-user needs different information than does the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
103 software engineer.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
104
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
105 Bio::Root::Err.pm, along with B<Bio::Root::Object.pm>, attempt to make such
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
106 problems tractable. Please see the L<Bio::Root::Object> documentation for more
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
107 about my error handling philosophy.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
108
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
109 A B<Bio::Root::Err.pm> object is an example of a Vector-Object: This module
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
110 inherits both from B<Bio::Root::Object.pm> and B<Bio::Root::Vector.pm>. This
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
111 permits a single Err object to exist within a linked list of Err objects OR
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
112 alone. See the L<Bio::Root::Vector> documentation for more about Vector-Objects.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
113
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
114 B<The API for this module is not complete since the module is under development.>
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
115
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
116 =head2 Other Exception Strategies
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
117
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
118 Exception handling with Perl 5 objects is currently not as evolved as one
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
119 would like. The error handling used by B<Bio::Root::Object.pm> and Bio::Root::Err.pm
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
120 relies on Perl's built-in error/exception handling with eval/die,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
121 which is not very object-aware. What I've attempted to do with these
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
122 modules is to make eval/die more object-savvy, as well as make Perl 5
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
123 objects more eval/die-savvy (but the current strategy is basically a hack).
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
124
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
125 It would be great if Perl could throw an object reference with die().
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
126 This would permit more intelligent and easy to write exception handlers.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
127 For now the Err.pm object is reconstructed from the output of L<string>().
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
128
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
129 There are some other third-party Exception classes such as
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
130 Torsten Ekedahl's B<Experimental::Exception.pm> or Ken Steven's Throwable.pm or
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
131 Graham Barr's Error.pm (see L<Other Exception Modules>). These modules
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
132 attempt to introduce a traditional "try-catch-throw" exception handling mechanism
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
133 into Perl. Future version of my modules (and perhaps Perl itself) may utilize one
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
134 of these.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
135
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
136 =head1 USAGE
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
137
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
138 A demo script that illustrates working with Bio::Root::Err objects is
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
139 examples/root_object/error.pl.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
140
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
141
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
142 =head1 DEPENDENCIES
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
143
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
144 Bio::Root::Err.pm inherits from B<Bio::Root::Object.pm> and B<Bio::Root::Vector.pm>.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
145
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
146
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
147 =head1 FEEDBACK
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
148
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
149 =head2 Mailing Lists
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
150
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
151 User feedback is an integral part of the evolution of this and other Bioperl modules.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
152 Send your comments and suggestions preferably to one of the Bioperl mailing lists.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
153 Your participation is much appreciated.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
154
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
155 bioperl-l@bioperl.org - General discussion
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
156 http://bioperl.org/MailList.shtml - About the mailing lists
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
157
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
158 =head2 Reporting Bugs
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
159
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
160 Report bugs to the Bioperl bug tracking system to help us keep track the bugs and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
161 their resolution. Bug reports can be submitted via email or the web:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
162
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
163 bioperl-bugs@bio.perl.org
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
164 http://bugzilla.bioperl.org/
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
165
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
166 =head1 AUTHOR Steve Chervitz
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
167
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
168 Email sac@bioperl.org
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
169
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
170 See L<the FEEDBACK section | FEEDBACK> section for where to send bug reports and comments.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
171
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
172 =head1 VERSION
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
173
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
174 Bio::Root::Err.pm, 0.041
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
175
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
176
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
177 =head1 SEE ALSO
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
178
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
179 Bio::Root::Object.pm - Core object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
180 Bio::Root::Vector.pm - Vector object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
181 Bio::Root::Global.pm - Manages global variables/constants
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
182
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
183 http://bio.perl.org/Projects/modules.html - Online module documentation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
184 http://bio.perl.org/ - Bioperl Project Homepage
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
185
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
186 =head2 Other Exception Modules
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
187
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
188 Experimental::Exception.pm - ftp://ftp.matematik.su.se/pub/teke/
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
189 Error.pm - http://www.cpan.org/authors/id/GBARR/
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
190 Throwable.pm - mailto:kstevens@globeandmail.ca
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
191
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
192 http://genome-www.stanford.edu/perlOOP/exceptions.html
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
193
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
194 =head1 ACKNOWLEDGEMENTS
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
195
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
196 This module was developed under the auspices of the Saccharomyces Genome
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
197 Database:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
198 http://genome-www.stanford.edu/Saccharomyces
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
199
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
200 Other Bioperl developers contributed ideas including Ewan Birney, Ian Korf,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
201 Chris Dagdigian, Georg Fuellen, and Steven Brenner.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
202
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
203 =head1 COPYRIGHT
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
204
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
205 Copyright (c) 1996-8 Steve Chervitz. All Rights Reserved.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
206 This module is free software; you can redistribute it and/or
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
207 modify it under the same terms as Perl itself.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
208
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
209 =head1 TODO
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
210
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
211 =over 2
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
212
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
213 =item * Improve documentation.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
214
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
215 =item * Experiment with other Exception modules.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
216
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
217 =back
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
218
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
219 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
220
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
221 ## END MAIN POD DOCUMENTATION'
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
222
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
223 =head1 APPENDIX
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
224
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
225 Methods beginning with a leading underscore are considered private
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
226 and are intended for internal use by this module. They are
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
227 B<not> considered part of the public interface and are described here
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
228 for documentation purposes only.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
229
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
230 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
231
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
232
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
233 ########################################################
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
234 # CONSTRUCTOR #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
235 ########################################################
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
236
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
237
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
238 =head2 _initialize
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
239
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
240 Usage : n/a; automatically called by Bio::Root::Object::new()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
241 Purpose : Initializes key Bio::Root::Err.pm data.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
242 Returns : String (the -MAKE constructor option.)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
243 Argument : Named parameters passed from new()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
244 : (PARAMETER TAGS CAN BE UPPER OR LOWER CASE).
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
245 : -MSG => basic description of the exception.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
246 : -NOTE => additional note to indicate cause of exception
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
247 : or provide information about how to fix/report it
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
248 : -TECH => addition note with technical information
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
249 : of interest to developer.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
250 : -STACK => array reference containing caller() data
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
251 : -TYPE => string, one of @Bio::Root::Err::ERR_TYPES
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
252 : (default = exception).
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
253 : -CONTEXT => array reference
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
254 : -OBJ => Err object to be cloned.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
255
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
256 See Also : B<Bio::Root::Object::_set_err()>
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
257
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
258 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
259
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
260 #----------------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
261 sub _initialize {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
262 #----------------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
263 my( $self, @param ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
264
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
265 my $make = $self->Bio::Root::Object::_initialize( @param );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
266
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
267 my( $msg, $note, $tech, $stack, $type, $context, $obj) =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
268 $self->_rearrange([qw(MSG NOTE TECH STACK TYPE CONTEXT OBJ)], @param);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
269
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
270 ## NOTE: Don't eval {} the construction process for Err objects.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
271
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
272 if($make =~ /clone/i) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
273 $self->_set_clone($obj);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
274 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
275 if(!$self->_build_from_string($msg, $note, $tech)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
276 # print "Failed to rebuild: msg = $msg";<STDIN>;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
277 $self->set('msg', $msg );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
278 $self->_set_type( $type );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
279 $self->_set_context($context);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
280 $self->_set_list_data('note', $note );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
281 $self->_set_list_data('tech', $tech );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
282 $self->_set_list_data('stack', $stack );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
283 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
284 $self->set_display();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
285 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
286
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
287 $DEBUG and do{ print STDERR "---> Initialized Err (${\ref($self)}).\n\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
288 # $self->print();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
289 };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
290 $make;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
291 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
292
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
293 ##
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
294 ## Destructor: Not needed currently. Perhaps if and when Vector is used by delegation.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
295 ##
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
296
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
297 #####################################################################################
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
298 ## ACCESSORS ##
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
299 #####################################################################################
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
300
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
301
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
302
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
303 =head2 _set_clone
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
304
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
305 Usage : n/a; internal method used by _initialize()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
306 Purpose : Copy all Bio::Root::Err.pm data members into a new object reference.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
307 Argument : object ref for object to be cloned.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
308 Comments : Does not cloning the vector since this method is
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
309 : typically used to extract a single Err object from its vector.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
310
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
311 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
312
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
313 #---------------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
314 sub _set_clone {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
315 #---------------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
316 my($self, $obj) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
317
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
318 ref($obj) || throw($self, "Can't clone $ID object: Not an object ref ($obj)");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
319
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
320 $self->{'_type'} = $obj->{'_type'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
321 $self->{'_msg'} = $obj->{'_msg'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
322 $self->{'_note'} = $obj->{'_note'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
323 $self->{'_tech'} = $obj->{'_tech'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
324 $self->{'_stack'} = $obj->{'_stack'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
325 $self->{'_context'} = $obj->{'_context'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
326 # $self->clone_vector($obj);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
327 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
328
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
329
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
330 =head2 _build_from_string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
331
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
332 Usage : n/a; called by _initialize()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
333 Purpose : Re-create an Err.pm object from a string containing Err data.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
334 Returns : boolean, (was the Err.pm object rebuilt?)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
335 Argument : message, note, tech passed from _initialize()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
336 : The message is examined to see if it contains a stringified error.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
337
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
338 See Also : L<_initialize>(), L<string>(), L<_has_err>()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
339
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
340 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
341
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
342 #----------------------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
343 sub _build_from_string {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
344 #----------------------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
345 my ($self, $msg, $note, $tech) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
346 my @list = split "\n", $msg;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
347 my ($mode,$line);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
348 my $rebuilt = 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
349
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
350 # print "$ID: Attempting to build from string: $msg";<STDIN>;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
351
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
352 MEMBER:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
353 foreach $line (@list) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
354 if($line =~ /^-+$/) { last MEMBER; }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
355 if($line =~ /^-+ (\w+) -+$/) { $self->{'_type'} = $1; $rebuilt = 1; next MEMBER; }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
356 if($line =~ /^MSG: *(\w.*)/) { my $msg = $1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
357 if($self->_has_err($msg)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
358 die "Duplicate error.";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
359 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
360 $self->{'_msg'} = $msg;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
361 $mode = 'msg';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
362 next MEMBER; }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
363 if($line =~ /^CONTEXT: *(\w.*)/) { push @{$self->{'_context'}}, $1; $mode = 'context'; next MEMBER; }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
364 if($line =~ /^NOTE: *(\w.*)/) { push @{$self->{'_note'}}, $1; $mode = 'note'; next MEMBER; }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
365 if($line =~ /^TECH: *(\w.*)/) { push @{$self->{'_tech'}}, $1; $mode = 'tech'; next MEMBER; }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
366 if($line =~ /^STACK:/) { $mode = 'stack'; next MEMBER; }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
367 next MEMBER if !$mode;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
368 SWITCH: {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
369 local $_ = $mode;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
370 m/msg/ && do{ $self->{'_msg'} .= "$line\n"; last SWITCH; };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
371 m/note/ && do{ push @{$self->{'_note'}}, $line; last SWITCH; };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
372 m/context/ && do{ push @{$self->{'_context'}}, $line; last SWITCH; };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
373 m/tech/ && do{ push @{$self->{'_tech'}}, $line; last SWITCH; };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
374 m/stack/ && do{ push @{$self->{'_stack'}}, $line; last SWITCH; };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
375 next MEMBER;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
376 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
377 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
378 if($rebuilt) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
379 ## Optionally add additional notes.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
380 $self->_set_list_data('note', $note) if defined $note;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
381 $self->_set_list_data('tech', $tech) if defined $tech;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
382 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
383
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
384 $rebuilt;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
385 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
386
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
387
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
388 =head2 _has_err
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
389
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
390 Usage : n/a; internal method called by _build_from_string()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
391 Purpose : Deterimine if an Err has already been set to prevent duplicate Errs.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
392 Returns : boolean
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
393
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
394 See Also : L<_build_from_string>()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
395
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
396 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
397
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
398 #-------------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
399 sub _has_err {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
400 #-------------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
401 my ($self, $msg) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
402
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
403 $msg =~ s/^\s+//;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
404 $msg =~ s/\s+$//;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
405
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
406 my $err = $self->first;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
407 my ($existing_msg);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
408 do {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
409 # print "checking err object $self\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
410 $existing_msg = $err->msg;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
411 $existing_msg =~ s/^\s+//;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
412 $existing_msg =~ s/\s+$//;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
413 # print " msg: $existing_msg";<STDIN>;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
414 return 1 if $existing_msg eq $msg;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
415
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
416 } while($err = $err->next);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
417
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
418 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
419 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
420
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
421
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
422 =head2 _set_type
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
423
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
424 Usage : n/a; internal method
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
425 Purpose : Sets the type of Err (warning, exception, fatal)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
426 : Called by _initialize()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
427 Argument : string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
428
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
429 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
430
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
431 #----------------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
432 sub _set_type {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
433 #----------------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
434 my( $self, $data ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
435 $data ||= 'EXCEPTION';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
436
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
437 # printf "\n$ID: Setting type (%s) for err = %s\n", $data, $self->msg;<STDIN>;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
438
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
439 my (@type);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
440 if( @type = grep /$data/i, @Bio::Root::Err::ERR_TYPES ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
441 $self->{'_type'} = $type[0];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
442 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
443 $self->{'_type'} = 'EXCEPTION';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
444 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
445
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
446 # print "type = $self->{'_type'} for $self";<STDIN>;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
447 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
448
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
449
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
450
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
451 =head2 _set_list_data
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
452
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
453 Usage : n/a; internal method used by set().
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
454 : $err->_set_list_data( $member, $data);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
455 Purpose : For data members which are anonymous arrays: note, tech, stack,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
456 : adds the given data to the list.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
457 Arguments : $member = any of qw(note tech stack)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
458 : $data = string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
459 Comments : Splits $data on tab. Each item
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
460 : of the split is a new entry.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
461 : To clobber the current data (unusual situation), you must first
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
462 : call set() with no data then call again with desired data.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
463
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
464 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
465
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
466 #-------------------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
467 sub _set_list_data {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
468 #-------------------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
469 my( $self, $member, $data ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
470
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
471 # Sensitive to data member name changes.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
472 $member = "_\l$member";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
473
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
474 # $DEBUG && do {printf STDERR "\n$ID: Setting \"%s\" list data (%s)\n", $member, $data;<STDIN>; };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
475
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
476 defined $self->{$member} and return $self->_add_list_data( $member, $data );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
477
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
478 if( $data ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
479 $self->{$member} = [];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
480 if( $member =~ /stack/) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
481 foreach (@$data) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
482 push @{ $self->{$member}}, format_stack_entry(@$_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
483 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
484 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
485 my @entries = split "\t", $data;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
486 foreach (@entries) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
487 next if /^$/;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
488 # $DEBUG && do {print STDERR "adding $member: $_";<STDIN>;};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
489 push @{ $self->{$member}}, $_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
490 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
491 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
492 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
493 $self->{$member} = undef;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
494 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
495 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
496
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
497
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
498 =head2 _set_context
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
499
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
500 Usage : n/a; internal method used by set().
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
501 Purpose : Sets the object containment context for the exception.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
502 : (this is the hierarchy of objects in which the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
503 : exception occurred.)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
504
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
505 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
506
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
507 #------------------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
508 sub _set_context {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
509 #------------------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
510 my($self, $aref) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
511
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
512 eval {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
513 if (!ref $aref) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
514 # push @{$aref}, sprintf "object %s \"%s\"",ref($self->parent), $self->parent->name;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
515 push @{$aref}, "UNKNOWN CONTEXT";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
516 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
517 };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
518 if($@) { push @{$aref}, 'undefined object'; }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
519
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
520 if($self->type eq 'EXCEPTION') {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
521 $aref->[0] = "Exception thrown by \l$aref->[0]";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
522 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
523 $aref->[0] = "Error in \l$aref->[0]";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
524 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
525
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
526 my $script = ($0 =~ /([\w\/\.]+)/, $1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
527 push @$aref, "SCRIPT: $script";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
528
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
529 $self->{'_context'} = $aref;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
530
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
531 # print "$ID: _set_context():\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
532 # foreach(@$aref) { print " $_\n"; }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
533 # <STDIN>;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
534 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
535
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
536
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
537
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
538 =head2 set
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
539
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
540 Usage : $err->set( $member, $data );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
541 Purpose : General accessor for setting any Err.pm data member.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
542 Example : $err->set('note', 'this is an additional note.');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
543 Returns : n/a
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
544 Argument : $member = string, any of qw(msg type note tech stack)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
545 : $data = string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
546 Throws : n/a
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
547 Comments : Note, tech, and stack items are appended to any existing
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
548 : notes, tech notes, and stack.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
549 : There should be no need to mess with the stack.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
550
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
551 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
552
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
553 #---------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
554 sub set {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
555 #---------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
556 my( $self, $member, $data ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
557
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
558 local $_ = "\u$member";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
559 SWITCH: {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
560 /msg/i && do{ $self->{'_msg'} = (defined $data ? $data : 'Unknown error'); last SWITCH; };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
561 /type/i && do{ $self->_set_type( $data ); last SWITCH; };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
562 /note|tech|stack/i && do{ $self->_set_list_data( $member, $data); last SWITCH};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
563 warn "\n*** Invalid or unspecified Err data member: $member\n\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
564 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
565 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
566
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
567
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
568 =head2 msg
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
569
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
570 Usage : $message = $err->msg;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
571 Purpose : Get the main message associated with the exception.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
572 Returns : String
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
573 Argument : optional string to be used as a delimiter.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
574
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
575 See Also : L<get>(), L<string>()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
576
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
577 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
578
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
579
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
580 #-------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
581 sub msg { my($self,$delimiter) = @_; $self->get('msg',$delimiter); }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
582 #-------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
583
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
584
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
585 =head2 type
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
586
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
587 Usage : $type = $err->type;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
588 Purpose : Get the type of Err (warning, exception, fatal)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
589 Returns : String
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
590 Argument : optional string to be used as a delimiter.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
591
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
592 See Also : L<get>(), L<string>()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
593
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
594 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
595
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
596 #--------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
597 sub type { my($self,$delimiter) = @_; $self->get('type',$delimiter); }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
598 #--------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
599
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
600
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
601 =head2 note
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
602
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
603 Usage : $note = $err->note;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
604 : $note = $err->note('<P>');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
605 Purpose : Get any general note associated with the exception.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
606 Returns : String
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
607 Argument : optional string to be used as a delimiter.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
608
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
609 See Also : L<get>(), L<string>()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
610
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
611 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
612
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
613 #---------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
614 sub note { my($self,$delimiter) = @_; $self->get('note',$delimiter); }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
615 #---------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
616
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
617
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
618 =head2 tech
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
619
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
620 Usage : $tech = $err->tech;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
621 : $tech = $err->tech('<P>');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
622 Purpose : Get any technical note associate with the exception.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
623 Returns : String
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
624 Argument : optional string to be used as a delimiter.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
625
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
626 See Also : L<get>(), L<string>()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
627
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
628 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
629
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
630 #------------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
631 sub tech { my($self,$delimiter) = @_; $self->get('tech',$delimiter); }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
632 #------------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
633
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
634
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
635
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
636 =head2 stack
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
637
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
638 Usage : $stack = $err->stack;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
639 : $stack = $err->stack('<P>');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
640 Purpose : Get the call stack for the exception.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
641 Returns : String
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
642 Argument : optional string to be used as a delimiter.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
643
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
644 See Also : L<get>(), L<string>()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
645
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
646 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
647
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
648 #----------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
649 sub stack { my($self,$delimiter) = @_; $self->get('stack',$delimiter); }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
650 #----------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
651
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
652
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
653
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
654 =head2 context
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
655
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
656 Usage : $context = $err->context;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
657 : $context = $err->context('<P>');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
658 Purpose : Get the containment context of the object which generated the exception.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
659 Returns : String
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
660 Argument : optional string to be used as a delimiter.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
661
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
662 See Also : L<get>(), L<string>()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
663
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
664 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
665
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
666 #------------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
667 sub context { my($self,$delimiter) = @_; $self->get('context',$delimiter); }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
668 #------------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
669
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
670
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
671
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
672 =head2 get
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
673
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
674 Usage : $err->get($member, $delimiter);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
675 Purpose : Get specific data from the Err.pm object.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
676 Returns : String in scalar context.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
677 : Array in list context.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
678 Argument : $member = any of qw(msg type note tech stack context) or combination.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
679 : $delimiter = optional string to be used as a delimiter
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
680 : between member data.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
681
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
682 See Also : L<string>(), L<msg>(), L<note>(), L<tech>(), L<type>(), L<context>(), L<stack>()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
683
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
684 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
685
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
686 #---------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
687 sub get {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
688 #---------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
689 my( $self, $member, $delimiter ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
690
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
691 my $outer_delim = $delimiter || "\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
692 # my $outer_delim = ($CGI ? "\n<P>" : $delimiter); ## Subtle bug here.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
693
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
694 my (@out);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
695 local $_ = $member;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
696 SWITCH: {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
697 /type/i && do{ push (@out, $self->{'_type'},$outer_delim) };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
698 # /msg/i && do{ print "getting msg";<STDIN>; push (@out, (defined $self->{'_msg'} ? $self->{'_msg'} : ''),$outer_delim); print "msg: @out<---";<STDIN>; };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
699 /msg/i && do{ push (@out, (defined $self->{'_msg'} ? $self->{'_msg'} : ''),$outer_delim); };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
700 /note/i && do{ push (@out, $self->_get_list_data('note', $delimiter ),$outer_delim) };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
701 /tech/i && do{ push (@out, $self->_get_list_data('tech', $delimiter ),$outer_delim) };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
702 /stack/i && do{ push (@out, $self->_get_list_data('stack', $delimiter ),$outer_delim) };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
703 /context/i && do{ push (@out, $self->_get_list_data('context', $delimiter ),$outer_delim) };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
704
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
705 ## CAN'T USE THE FOLLOWING FORM SINCE IT FAILS WHEN $member EQUALS 'msgnote'.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
706 # /note|tech|stack/ && do{ push @out, $self->_get_list_data( $_, $delimiter ); };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
707
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
708 last SWITCH;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
709 $self->warn("Invalid or undefined Err data member ($member).");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
710 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
711 # $DEBUG && do{ print STDERR "OUTER DELIM = $outer_delim \nOUT: \n @out <---";<STDIN>;};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
712 wantarray ? @out : join('',@out);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
713 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
714
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
715
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
716
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
717 =head2 _get_list_data
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
718
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
719 Usage : n/a; internal method used by get()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
720 Purpose : Gets data for members which are list refs (note, tech, stack, context)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
721 Returns : Array
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
722 Argument : ($member, $delimiter)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
723
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
724 See Also : L<get>()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
725
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
726 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
727
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
728 #-------------------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
729 sub _get_list_data {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
730 #-------------------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
731 my( $self, $member, $delimiter ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
732 $delimiter ||= "\t";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
733 # Sensitive to data member name changes.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
734 $member = "_\l$member";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
735 return if !defined $self->{$member};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
736 join( $delimiter, @{$self->{$member}} );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
737 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
738
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
739
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
740
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
741 =head2 get_all
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
742
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
743 Usage : (same as get())
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
744 Purpose : Get specific data from all errors in an Err.pm object.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
745 Returns : Array in list context.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
746 : String in scalar context.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
747 Argument : (same as get())
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
748
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
749 See Also : L<get>()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
750
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
751 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
752
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
753 #------------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
754 sub get_all {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
755 #------------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
756 my( $self, $member, $delimiter ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
757
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
758 if( $self->size() == 1) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
759 return $self->get( $member, $delimiter);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
760 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
761 my $err = $self;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
762
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
763 ### Return data from multiple errors in a list.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
764 if(wantarray) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
765 my @out;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
766 do{ push @out, $err->get( $member);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
767 } while($err = $err->prev());
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
768 return @out;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
769
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
770 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
771 ### Return data from multiple errors in a string with each error's data
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
772 ### bracketed by a "Error #n\n" line and two delimiters.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
773 my $out = '';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
774 if($err->size() == 1) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
775 $out = $err->get( $member, $delimiter);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
776 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
777 do{ #$out .= "Error #${\$err->rank()}$delimiter";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
778 $out .= $err->get( $member, $delimiter);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
779 $out .= $delimiter.$delimiter;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
780 } while($err = $err->prev());
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
781 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
782 return $out;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
783 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
784 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
785 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
786
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
787 #####################################################################################
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
788 ## INSTANCE METHODS ##
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
789 #####################################################################################
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
790
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
791
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
792 =head2 _add_note
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
793
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
794 Usage : n/a; internal method called by _add_list_data()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
795 Purpose : adds a new note.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
796
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
797 See Also : L<_add_list_data>()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
798
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
799 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
800
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
801 #---------------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
802 sub _add_note {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
803 #---------------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
804 my( $self, $data ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
805
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
806 if( defined $self->{'_note'} ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
807 push @{ $self->{'_note'}}, $data;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
808 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
809 $self->_set_list_data('note', $data );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
810 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
811 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
812
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
813 #----------------------------------------------------------------------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
814 =head2 _add_tech()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
815
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
816 Usage : n/a; internal method called by _add_list_data()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
817 Purpose : adds a new technical note.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
818
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
819 See Also : L<_add_list_data>()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
820
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
821 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
822
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
823 #-------------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
824 sub _add_tech {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
825 #-------------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
826 my( $self, $data ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
827
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
828 if( defined $self->{'_tech'} ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
829 push @{ $self->{'_tech'}}, $data;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
830 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
831 $self->_set_list_data('Tech', $data );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
832 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
833 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
834
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
835
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
836 =head2 _add_list_data
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
837
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
838 Usage : n/a; called by _set_list_data()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
839 Purpose : adds a new note or tech note.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
840
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
841 See Also : L<_set_list_data>()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
842
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
843 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
844
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
845 #--------------------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
846 sub _add_list_data {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
847 #--------------------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
848 my( $self, $member, $data ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
849
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
850 local $_ = $member;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
851 SWITCH: {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
852 /note/i && do{ $self->_add_note( $data ); };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
853 /tech/i && do{ $self->_add_tech( $data ); };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
854 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
855 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
856
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
857
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
858
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
859 =head2 print
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
860
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
861 Usage : $err->print;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
862 Purpose : Prints Err data to STDOUT or a FileHandle.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
863 Returns : Call to print
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
864 Argument : Named parameters for string()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
865 Comments : Uses string() to get data.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
866
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
867 See Also : L<string>()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
868
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
869 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
870
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
871 #-----------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
872 sub print {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
873 #-----------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
874 my( $self, %param ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
875 # my $OUT = $self->parent->fh();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
876 # print $OUT $self->string(%param);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
877 print $self->string(%param);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
878 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
879
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
880
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
881 =head2 string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
882
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
883 Usage : $err->string( %named_parameters);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
884 Purpose : Stringify the data contained in the Err.pm object.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
885 Example : print STDERR $err->string;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
886 Returns : String
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
887 Argument : Named parameters (optional) passed to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
888 : Bio::Root::IOManager::set_display().
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
889
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
890 See Also : L<print>(), L<_build_from_string>(), B<Bio::Root::IOManager::set_display()>
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
891
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
892 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
893
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
894 #-----------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
895 sub string {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
896 #-----------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
897 my( $self, @param ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
898
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
899 my %param = @param;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
900 $self->set_display( @param );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
901 my $show = $self->show;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
902 my $out = $param{-BEEP} ? "\a" : '';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
903
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
904 my $err = $param{-CURRENT} ? $self->last : $self->first;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
905
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
906 # my $err1 = $err;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
907 # my $errL = $self->last;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
908 # print "\n\nERR 1: ${\$err1->msg}";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
909 # print "\nERR L: ${\$errL->msg}";<STDIN>;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
910
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
911 my $numerate = $err->size() >1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
912 my $count = 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
913 my ($title);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
914 my $hasnote = defined $self->{'_note'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
915 my $hastech = defined $self->{'_tech'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
916
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
917 while (ref $err) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
918 $count++;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
919 # $out .= sprintf "\nERROR #%d:", $count;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
920
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
921 if(not $title = $err->{'_type'}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
922 $err = $err->next();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
923 next;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
924 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
925 if( $numerate) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
926 ## The rank data is a bit screwy at present.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
927 $out .= sprintf "\n%s %s %s\n", '-'x 20, $title,'-'x 20;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
928 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
929 $out .= sprintf "\n%s %s %s\n", '-'x20, $title,'-'x20;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
930 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
931 $show =~ /msg|default/i and $out .= "MSG: " . $err->msg("\n");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
932 $show =~ /note|default/i and $hasnote and $out .= "NOTE: ".$err->note("\n");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
933 $show =~ /tech|default/i and $hastech and $out .= "TECH: ".$err->tech("\n");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
934 $show =~ /context|default/i and $out .= "CONTEXT: ".$err->context("\n");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
935 $show =~ /stack|default/i and $out .= "STACK: \n".$err->stack("\n");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
936 $out .= sprintf "%s%s%s\n",'-'x 20, '-'x (length($title)+2), '-'x 20;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
937
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
938 # print "$ID: string: cumulative err:\n$out\n";<STDIN>;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
939
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
940 $err = $err->next();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
941 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
942
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
943 $out;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
944 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
945
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
946
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
947
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
948 =head2 is_fatal
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
949
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
950 Usage : $err->is_fatal;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
951 Purpose : Determine if the error is of type 'FATAL'
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
952 Returns : Boolean
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
953 Status : Experimental, Deprecated
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
954
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
955 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
956
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
957 #--------------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
958 sub is_fatal { my $self = shift; $self->{'_type'} eq 'FATAL'; }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
959 #--------------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
960
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
961 #####################################################################################
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
962 ## CLASS METHODS ##
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
963 #####################################################################################
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
964
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
965
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
966 =head2 throw
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
967
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
968 Usage : throw($object, [message], [note], [technical note]);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
969 : This method is exported.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
970 Purpose : Class method version of Bio::Root::Object::throw().
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
971 Returns : die()s with the contents of the Err object in a string.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
972 : If the global strictness is less than -1, die is not called and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
973 : the error is printed to STDERR.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
974 Argument : [0] = object throwing the error.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
975 : [1] = optional message about the error.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
976 : [2] = optional note about the error.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
977 : [3] = optional technical note about the error.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
978 Comments : The glogal verbosity level is not used. For verbosity-sensitive
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
979 : behavior, use Bio::Root::Object::throw().
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
980 Status : Experimental
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
981 : This method is an alternative to Bio::Root::Object::throw()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
982 : and is not as well developed or documented as that method.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
983
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
984 See Also : L<warning>(), B<Bio::Root::Object::throw()> B<Bio::Root::Global::strictness>()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
985
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
986 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
987
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
988 #----------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
989 sub throw {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
990 #----------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
991 my($obj, @param) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
992
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
993 # print "Throwing exception for object ${\ref $self} \"${\$self->name}\"\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
994 my $err = new Bio::Root::Err(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
995 -MSG =>$param[0],
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
996 -NOTE =>$param[1],
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
997 -TECH =>$param[2],
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
998 -STACK =>scalar(Bio::Root::Object::stack_trace($obj,2)),
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
999 -CONTEXT =>Bio::Root::Object::containment($obj),
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1000 -TYPE =>'EXCEPTION',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1001 # -PARENT =>$obj,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1002 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1003
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1004 if(strictness() < -1) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1005 print STDERR $err->string(-BEEP=>1) unless verbosity() < 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1006 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1007 die $err->string;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1008 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1009
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1010 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1011 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1012
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1013
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1014 =head2 warning
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1015
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1016 Usage : warning($object, [message], [note], [technical note]);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1017 : This method is exported.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1018 Purpose : Class method version of Bio::Root::Object::warn().
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1019 Returns : Prints the contents of the error to STDERR and returns false (0).
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1020 : If the global strictness() is > 1, warn() calls are converted
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1021 : into throw() calls.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1022 Argument : [0] = object producing the warning.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1023 : [1] = optional message about the error.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1024 : [2] = optional note about the error.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1025 : [3] = optional technical note about the error.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1026 :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1027 Comments : The glogal verbosity level is not used. For verbosity-sensitive
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1028 : behavior, use Bio::Root::Object::warn().
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1029 Status : Experimental
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1030 : This method is an alternative to Bio::Root::Object::warn()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1031 : and is not as well developed or documented as that method.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1032
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1033 See Also : L<throw>, B<Bio::Root::Object::warn()>, B<Bio::Root::Global::strictness()>
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1034
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1035 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1036
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1037 #-----------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1038 sub warning {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1039 #-----------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1040 my($obj, @param) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1041
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1042 # print "Throwing exception for object ${\ref $self} \"${\$self->name}\"\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1043 my $err = new Bio::Root::Err(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1044 -MSG =>$param[0],
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1045 -NOTE =>$param[1],
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1046 -TECH =>$param[2],
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1047 -STACK =>scalar(Bio::Root::Object::stack_trace($obj,2)),
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1048 -CONTEXT =>Bio::Root::Object::containment($obj),
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1049 -TYPE =>'WARNING',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1050 # -PARENT =>$obj,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1051 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1052
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1053 if(strictness() > 1) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1054 die $err->string;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1055
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1056 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1057 print STDERR $err->string(-BEEP=>1) unless $DONT_WARN;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1058 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1059
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1060 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1061 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1062
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1063
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1064 =head2 format_stack_entry
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1065
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1066 Usage : &format_stack_entry(<class>,<file>,<line>,<class_method>,<has_args>,<wantarray>)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1067 : This function is exported.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1068 Purpose : Creates a single stack entry given a caller() list.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1069 Argument : List of scalars (output of the caller() method).
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1070 Returns : String = class_method($line)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1071 : e.g., Bio::Root::Object::name(1234)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1072
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1073 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1074
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1075 #------------------------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1076 sub format_stack_entry {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1077 #------------------------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1078 my( $class, $file, $line, $classmethod, $hasargs, $wantarray) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1079
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1080 # if($DEBUG) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1081 # print STDERR "format_stack_entry data:\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1082 # foreach(@_) {print STDERR "$_\n"; } <STDIN>;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1083 # }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1084
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1085 $classmethod ||= 'unknown class/method';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1086 $line ||= 'unknown line';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1087 return "$classmethod($line)";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1088 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1089
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1090 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1091 __END__
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1092
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1093 #####################################################################################
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1094 # END OF CLASS #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1095 #####################################################################################
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1096
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1097 =head1 FOR DEVELOPERS ONLY
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1098
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1099 =head2 Data Members
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1100
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1101 Information about the various data members of this module is provided for those
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1102 wishing to modify or understand the code. Two things to bear in mind:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1103
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1104 =over 4
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1105
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1106 =item 1 Do NOT rely on these in any code outside of this module.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1107
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1108 All data members are prefixed with an underscore to signify that they are private.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1109 Always use accessor methods. If the accessor doesn't exist or is inadequate,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1110 create or modify an accessor (and let me know, too!).
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1111
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1112 =item 2 This documentation may be incomplete and out of date.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1113
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1114 It is easy for this documentation to become obsolete as this module is still evolving.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1115 Always double check this info and search for members not described here.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1116
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1117 =back
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1118
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1119 An instance of Bio::Root::Err.pm is a blessed reference to a hash containing
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1120 all or some of the following fields:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1121
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1122 FIELD VALUE
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1123 ------------------------------------------------------------------------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1124 _type fatal | warning | exception (one of @Bio::Root::Err::ERR_TYPES).
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1125
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1126 _msg Terse description: Main cause of error.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1127
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1128 _note List reference. Verbose description: probable cause & troubleshooting for user.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1129
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1130 _tech List reference. Technical notes of interest to programmer.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1131
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1132 _stack List reference. Stack trace: list of "class::method(line number)" strings.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1133
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1134
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1135
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1136 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1137
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1138 1;