annotate variant_effect_predictor/Bio/Root/Root.pm @ 0:2bc9b66ada89 draft default tip

Uploaded
author mahtabm
date Thu, 11 Apr 2013 06:29:17 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1 package Bio::Root::Root;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2 use strict;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
4 # $Id: Root.pm,v 1.30 2002/12/16 09:44:28 birney Exp $
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
5
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
6 =head1 NAME
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
7
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
8 Bio::Root::Root - Hash-based implementation of Bio::Root::RootI
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
9
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
10 =head1 SYNOPSIS
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
11
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
12 # any bioperl or bioperl compliant object is a RootI
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
13 # compliant object
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
14
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
15 # Here's how to throw and catch an exception using the eval-based syntax.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
16
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
17 $obj->throw("This is an exception");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
18
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
19 eval {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
20 $obj->throw("This is catching an exception");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
21 };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
22
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
23 if( $@ ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
24 print "Caught exception";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
25 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
26 print "no exception";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
27 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
28
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
29 # Alternatively, using the new typed exception syntax in the throw() call:
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
30
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
31 $obj->throw( -class => 'Bio::Root::BadParameter',
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
32 -text => "Can't open file $file",
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
33 -value => $file);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
34
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
35 # Exceptions can be used in an eval{} block as shown above or within
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
36 # a try{} block if you have installed the Error.pm module.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
37 # Here's a brief example. For more, see Bio::Root::Exception
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
38
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
39 use Error qw(:try);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
40
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
41 try {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
42 $obj->throw( # arguments as above );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
43 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
44 catch Bio::Root::FileOpenException with {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
45 my $err = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
46 print "Handling exception $err\n";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
47 };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
48
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
49 =head1 DESCRIPTION
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
50
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
51 This is a hashref-based implementation of the Bio::Root::RootI
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
52 interface. Most bioperl objects should inherit from this.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
53
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
54 See the documentation for Bio::Root::RootI for most of the methods
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
55 implemented by this module. Only overridden methods are described
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
56 here.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
57
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
58 =head2 Throwing Exceptions
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
59
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
60 One of the functionalities that Bio::Root::RootI provides is the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
61 ability to throw() exceptions with pretty stack traces. Bio::Root::Root
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
62 enhances this with the ability to use B<Error.pm> (available from CPAN)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
63 if it has also been installed.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
64
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
65 If Error.pm has been installed, throw() will use it. This causes an
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
66 Error.pm-derived object to be thrown. This can be caught within a
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
67 C<catch{}> block, from wich you can extract useful bits of
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
68 information. If Error.pm is not installed, it will use the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
69 Bio::Root::RootI-based exception throwing facilty.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
70
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
71 =head2 Typed Exception Syntax
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
72
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
73 The typed exception syntax of throw() has the advantage of plainly
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
74 indicating the nature of the trouble, since the name of the class
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
75 is included in the title of the exception output.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
76
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
77 To take advantage of this capability, you must specify arguments
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
78 as named parameters in the throw() call. Here are the parameters:
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
79
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
80 =over 4
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
81
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
82 =item -class
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
83
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
84 name of the class of the exception.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
85 This should be one of the classes defined in B<Bio::Root::Exception>,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
86 or a custom error of yours that extends one of the exceptions
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
87 defined in B<Bio::Root::Exception>.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
88
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
89 =item -text
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
90
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
91 a sensible message for the exception
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
92
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
93 =item -value
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
94
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
95 the value causing the exception or $!, if appropriate.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
96
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
97 =back
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
98
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
99 Note that Bio::Root::Exception does not need to be imported into
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
100 your module (or script) namespace in order to throw exceptions
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
101 via Bio::Root::Root::throw(), since Bio::Root::Root imports it.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
102
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
103 =head2 Try-Catch-Finally Support
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
104
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
105 In addition to using an eval{} block to handle exceptions, you can
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
106 also use a try-catch-finally block structure if B<Error.pm> has been
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
107 installed in your system (available from CPAN). See the documentation
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
108 for Error for more details.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
109
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
110 Here's an example. See the B<Bio::Root::Exception> module for
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
111 other pre-defined exception types:
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
112
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
113 try {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
114 open( IN, $file) || $obj->throw( -class => 'Bio::Root::FileOpenException',
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
115 -text => "Cannot open file $file for reading",
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
116 -value => $!);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
117 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
118 catch Bio::Root::BadParameter with {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
119 my $err = shift; # get the Error object
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
120 # Perform specific exception handling code for the FileOpenException
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
121 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
122 catch Bio::Root::Exception with {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
123 my $err = shift; # get the Error object
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
124 # Perform general exception handling code for any Bioperl exception.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
125 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
126 otherwise {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
127 # A catch-all for any other type of exception
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
128 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
129 finally {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
130 # Any code that you want to execute regardless of whether or not
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
131 # an exception occurred.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
132 };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
133 # the ending semicolon is essential!
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
134
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
135
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
136 =head1 CONTACT
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
137
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
138 Functions originally from Steve Chervitz. Refactored by Ewan Birney.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
139 Re-refactored by Lincoln Stein.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
140
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
141 =head1 APPENDIX
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
142
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
143 The rest of the documentation details each of the object
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
144 methods. Internal methods are usually preceded with a _
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
145
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
146 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
147
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
148 #'
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
149
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
150 use vars qw(@ISA $DEBUG $ID $Revision $VERSION $VERBOSITY $ERRORLOADED);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
151 use strict;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
152 use Bio::Root::RootI;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
153 use Bio::Root::IO;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
154
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
155 @ISA = 'Bio::Root::RootI';
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
156
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
157 BEGIN {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
158
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
159 $ID = 'Bio::Root::Root';
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
160 $VERSION = 1.0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
161 $Revision = '$Id: Root.pm,v 1.30 2002/12/16 09:44:28 birney Exp $ ';
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
162 $DEBUG = 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
163 $VERBOSITY = 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
164 $ERRORLOADED = 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
165
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
166 # Check whether or not Error.pm is available.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
167
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
168 # $main::DONT_USE_ERROR is intended for testing purposes and also
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
169 # when you don't want to use the Error module, even if it is installed.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
170 # Just put a INIT { $DONT_USE_ERROR = 1; } at the top of your script.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
171 if( not $main::DONT_USE_ERROR ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
172 if ( eval "require Error" ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
173 import Error qw(:try);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
174 require Bio::Root::Exception;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
175 $ERRORLOADED = 1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
176 $Error::Debug = 1; # enable verbose stack trace
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
177 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
178 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
179 if( !$ERRORLOADED ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
180 require Carp; import Carp qw( confess );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
181 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
182 $main::DONT_USE_ERROR; # so that perl -w won't warn "used only once"
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
183
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
184 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
185
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
186
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
187
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
188 =head2 new
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
189
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
190 Purpose : generic instantiation function can be overridden if
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
191 special needs of a module cannot be done in _initialize
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
192
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
193 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
194
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
195 sub new {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
196 # my ($class, %param) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
197 my $class = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
198 my $self = {};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
199 bless $self, ref($class) || $class;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
200
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
201 if(@_ > 1) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
202 # if the number of arguments is odd but at least 3, we'll give
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
203 # it a try to find -verbose
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
204 shift if @_ % 2;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
205 my %param = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
206 ## See "Comments" above regarding use of _rearrange().
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
207 $self->verbose($param{'-VERBOSE'} || $param{'-verbose'});
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
208 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
209 return $self;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
210 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
211
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
212
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
213 =head2 verbose
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
214
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
215 Title : verbose
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
216 Usage : $self->verbose(1)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
217 Function: Sets verbose level for how ->warn behaves
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
218 -1 = no warning
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
219 0 = standard, small warning
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
220 1 = warning with stack trace
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
221 2 = warning becomes throw
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
222 Returns : The current verbosity setting (integer between -1 to 2)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
223 Args : -1,0,1 or 2
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
224
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
225
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
226 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
227
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
228 sub verbose {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
229 my ($self,$value) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
230 # allow one to set global verbosity flag
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
231 return $DEBUG if $DEBUG;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
232 return $VERBOSITY unless ref $self;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
233
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
234 if (defined $value || ! defined $self->{'_root_verbose'}) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
235 $self->{'_root_verbose'} = $value || 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
236 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
237 return $self->{'_root_verbose'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
238 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
239
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
240 sub _register_for_cleanup {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
241 my ($self,$method) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
242 if($method) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
243 if(! exists($self->{'_root_cleanup_methods'})) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
244 $self->{'_root_cleanup_methods'} = [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
245 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
246 push(@{$self->{'_root_cleanup_methods'}},$method);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
247 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
248 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
249
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
250 sub _unregister_for_cleanup {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
251 my ($self,$method) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
252 my @methods = grep {$_ ne $method} $self->_cleanup_methods;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
253 $self->{'_root_cleanup_methods'} = \@methods;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
254 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
255
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
256
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
257 sub _cleanup_methods {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
258 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
259 return unless ref $self && $self->isa('HASH');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
260 my $methods = $self->{'_root_cleanup_methods'} or return;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
261 @$methods;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
262
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
263 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
264
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
265 =head2 throw
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
266
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
267 Title : throw
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
268 Usage : $obj->throw("throwing exception message");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
269 or
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
270 $obj->throw( -class => 'Bio::Root::Exception',
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
271 -text => "throwing exception message",
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
272 -value => $bad_value );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
273 Function: Throws an exception, which, if not caught with an eval or
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
274 a try block will provide a nice stack trace to STDERR
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
275 with the message.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
276 If Error.pm is installed, and if a -class parameter is
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
277 provided, Error::throw will be used, throwing an error
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
278 of the type specified by -class.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
279 If Error.pm is installed and no -class parameter is provided
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
280 (i.e., a simple string is given), A Bio::Root::Exception
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
281 is thrown.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
282 Returns : n/a
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
283 Args : A string giving a descriptive error message, optional
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
284 Named parameters:
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
285 '-class' a string for the name of a class that derives
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
286 from Error.pm, such as any of the exceptions
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
287 defined in Bio::Root::Exception.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
288 Default class: Bio::Root::Exception
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
289 '-text' a string giving a descriptive error message
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
290 '-value' the value causing the exception, or $! (optional)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
291
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
292 Thus, if only a string argument is given, and Error.pm is available,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
293 this is equivalent to the arguments:
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
294 -text => "message",
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
295 -class => Bio::Root::Exception
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
296 Comments : If Error.pm is installed, and you don't want to use it
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
297 for some reason, you can block the use of Error.pm by
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
298 Bio::Root::Root::throw() by defining a scalar named
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
299 $main::DONT_USE_ERROR (define it in your main script
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
300 and you don't need the main:: part) and setting it to
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
301 a true value; you must do this within a BEGIN subroutine.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
302
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
303 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
304
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
305 #'
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
306
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
307 sub throw{
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
308 my ($self,@args) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
309
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
310 my ( $text, $class ) = $self->_rearrange( [qw(TEXT CLASS)], @args);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
311
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
312 if( $ERRORLOADED ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
313 # print STDERR " Calling Error::throw\n\n";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
314
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
315 # Enable re-throwing of Error objects.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
316 # If the error is not derived from Bio::Root::Exception,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
317 # we can't guarantee that the Error's value was set properly
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
318 # and, ipso facto, that it will be catchable from an eval{}.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
319 # But chances are, if you're re-throwing non-Bio::Root::Exceptions,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
320 # you're probably using Error::try(), not eval{}.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
321 # TODO: Fix the MSG: line of the re-thrown error. Has an extra line
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
322 # containing the '----- EXCEPTION -----' banner.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
323 if( ref($args[0])) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
324 if( $args[0]->isa('Error')) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
325 my $class = ref $args[0];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
326 throw $class ( @args );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
327 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
328 my $text .= "\nWARNING: Attempt to throw a non-Error.pm object: " . ref$args[0];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
329 my $class = "Bio::Root::Exception";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
330 throw $class ( '-text' => $text, '-value' => $args[0] );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
331 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
332 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
333 $class ||= "Bio::Root::Exception";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
334
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
335 my %args;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
336 if( @args % 2 == 0 && $args[0] =~ /^-/ ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
337 %args = @args;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
338 $args{-text} = $text;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
339 $args{-object} = $self;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
340 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
341
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
342 throw $class ( scalar keys %args > 0 ? %args : @args ); # (%args || @args) puts %args in scalar context!
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
343 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
344 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
345 else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
346 # print STDERR " Not calling Error::throw\n\n";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
347 $class ||= '';
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
348 my $std = $self->stack_trace_dump();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
349 my $title = "------------- EXCEPTION $class -------------";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
350 my $footer = "\n" . '-' x CORE::length($title);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
351 $text ||= '';
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
352
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
353 my $out = "\n$title\n" .
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
354 "MSG: $text\n". $std . $footer . "\n";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
355
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
356 die $out;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
357 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
358 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
359
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
360 =head2 debug
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
361
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
362 Title : debug
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
363 Usage : $obj->debug("This is debugging output");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
364 Function: Prints a debugging message when verbose is > 0
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
365 Returns : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
366 Args : message string(s) to print to STDERR
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
367
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
368 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
369
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
370 sub debug{
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
371 my ($self,@msgs) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
372
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
373 if( $self->verbose > 0 ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
374 print STDERR join("", @msgs);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
375 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
376 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
377
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
378 =head2 _load_module
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
379
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
380 Title : _load_module
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
381 Usage : $self->_load_module("Bio::SeqIO::genbank");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
382 Function: Loads up (like use) the specified module at run time on demand.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
383 Example :
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
384 Returns : TRUE on success. Throws an exception upon failure.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
385 .
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
386 Args : The module to load (_without_ the trailing .pm).
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
387
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
388 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
389
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
390 sub _load_module {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
391 my ($self, $name) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
392 my ($module, $load, $m);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
393 $module = "_<$name.pm";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
394 return 1 if $main::{$module};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
395
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
396 # untaint operation for safe web-based running (modified after a fix
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
397 # a fix by Lincoln) HL
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
398 if ($name !~ /^([\w:]+)$/) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
399 $self->throw("$name is an illegal perl package name");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
400 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
401
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
402 $load = "$name.pm";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
403 my $io = Bio::Root::IO->new();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
404 # catfile comes from IO
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
405 $load = $io->catfile((split(/::/,$load)));
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
406 eval {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
407 require $load;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
408 };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
409 if ( $@ ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
410 $self->throw("Failed to load module $name. ".$@);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
411 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
412 return 1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
413 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
414
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
415
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
416 sub DESTROY {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
417 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
418 my @cleanup_methods = $self->_cleanup_methods or return;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
419 for my $method (@cleanup_methods) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
420 $method->($self);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
421 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
422 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
423
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
424
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
425
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
426 1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
427