File Coverage

blib/lib/Class/Autouse.pm
Criterion Covered Total %
statement 2017 2059 97.9
branch 148 214 69.1
condition 33 51 64.7
subroutine 607 609 99.6
pod 8 9 88.8
total 2813 2942 95.6


line stmt bran cond sub pod time code
1             package Class::Autouse;
2              
3             # See POD at end of file for documentation
4              
5 13     13   426369 use 5.006;
  13         52  
  13         616  
6 13     13   81 use strict;
  13         24  
  13         996  
7 13     13   82 no strict 'refs'; # We _really_ abuse refs :)
  13         24  
  13         369  
8 13     13   15130 use UNIVERSAL ();
  13         204  
  13         292  
9              
10             # Load required modules
11             # Luckily, these are so common they are basically free
12 13     13   72 use Carp ();
  13         26  
  13         275  
13 13     13   66 use Exporter ();
  13         24  
  13         265  
14 13     13   72 use File::Spec 0.80 ();
  13         387  
  13         303  
15 13     13   75 use List::Util 1.18 ();
  13         479  
  13         245  
16 13     13   72 use Scalar::Util ();
  13         25  
  13         287  
17              
18             # Globals
19 13     13   168 use vars qw{ $VERSION @ISA $DB $DEBUG };
  13         32  
  13         1290  
20 13     13   66 use vars qw{ $DEVEL $SUPERLOAD $NOSTAT $NOPREBLESS $STATICISA }; # Load environment
  13         35  
  13         1213  
21 13     13   66 use vars qw{ %SPECIAL %LOADED %BAD %TRIED_CLASS %TRIED_METHOD }; # Special cases
  13         24  
  13         982  
22 13     13   65 use vars qw{ @LOADERS @SUGAR $HOOKS $ORIGINAL_CAN $ORIGINAL_ISA }; # Working information
  13         31  
  13         1405  
23              
24             # Handle optimisation switches via constants to allow debugging and
25             # similar functions to be optimised out at compile time if not in use.
26             BEGIN {
27 13 50   13   81 $DB = 0 unless defined &DB::DB;
28 13 100       335 $DEBUG = 0 unless defined $DEBUG;
29             }
30 13     13   79 use constant DB => !! $DB;
  13         25  
  13         1466  
31 13     13   74 use constant DEBUG => !! $DEBUG;
  13         28  
  13         3372  
32             print "Class::Autouse -> Debugging Activated.\n" if DEBUG;
33              
34             # Compile-time Initialisation and Optimisation
35             BEGIN {
36 13     13   41 $VERSION = '2.01';
37              
38             # Become an exporter so we don't get complaints when we act as a pragma.
39             # I don't fully understand the reason for this, but it works and I can't
40             # recall how to replicate the problem, so leaving it in to avoid any
41             # possible reversion. Besides, so many things use Exporter it should
42             # be practically free to do this.
43 13         235 @ISA = qw{ Exporter };
44              
45             # We always start with the superloader off
46 13         43 $SUPERLOAD = 0;
47              
48             # When set, disables $obj->isa/can where $obj is blessed before its class is loaded
49             # Things will operate more quickly when set, but this breaks things if you're
50             # unserializing objects from Data::Dumper, etc., and relying on this module to
51             # load the related classes on demand.
52 13         36 $NOPREBLESS = 0;
53              
54             # Disable stating for situations where modules are on remote disks
55 13         37 $NOSTAT = 0;
56              
57             # AUTOLOAD hook counter
58 13         28 $HOOKS = 0;
59              
60             # ERRATA
61             # Special classes are internal and should be left alone.
62             # Loaded modules are those already loaded by us.
63             # Bad classes are those that are incompatible with us.
64 13         27 %BAD = map { $_ => 1 } qw{
  13         73  
65             IO::File
66             };
67              
68 13         40 %SPECIAL = map { $_ => 1 } qw{
  104         244  
69             CORE main UNIVERSAL
70             ARRAY HASH SCALAR REF GLOB
71             };
72              
73 13         42 %LOADED = map { $_ => 1 } qw{
  91         196  
74             UNIVERSAL
75             Carp
76             Exporter
77             File::Spec
78             List::Util
79             Scalar::Util
80             Class::Autouse
81             };
82              
83             # "Have we tried to autoload a class before?"
84             # Per-class loop protection and improved shortcutting.
85             # Defaults to specials+preloaded to prevent attempting them.
86 13         136 %TRIED_CLASS = ( %SPECIAL, %LOADED );
87              
88             # "Have we tried to autoload a method before?"
89             # Per-method loop protection and improved shortcutting
90 13         40 %TRIED_METHOD = ();
91              
92             # Storage for dynamic loaders (regular and sugar)
93 13         24 @LOADERS = ();
94 13         22 @SUGAR = ();
95              
96             # We play with UNIVERSAL:: functions, so save backup copies
97 13         28 $ORIGINAL_CAN = \&UNIVERSAL::can;
98 13         62926 $ORIGINAL_ISA = \&UNIVERSAL::isa;
99             }
100              
101              
102              
103              
104              
105             #####################################################################
106             # Configuration and Setting up
107              
108             # Developer mode flag.
109             # Cannot be turned off once turned on.
110             sub devel {
111 1     1 1 3 _debug(\@_, 1) if DEBUG;
112              
113             # Enable if not already
114 1 50       6 return 1 if $DEVEL++;
115              
116             # Load any unloaded modules.
117             # Most of the time there should be nothing here.
118 1         98 foreach my $class ( grep { $INC{$_} eq 'Class::Autouse' } keys %INC ) {
  68         131  
119 0         0 $class =~ s/\//::/;
120 0         0 $class =~ s/\.pm$//i;
121 0         0 Class::Autouse->load($class);
122             }
123             }
124              
125             # Happy Fun Super Loader!
126             # The process here is to replace the &UNIVERSAL::AUTOLOAD sub
127             # ( which is just a dummy by default ) with a flexible class loader.
128             sub superloader {
129 0     0 1 0 _debug(\@_, 1) if DEBUG;
130              
131             # Shortcut if needed
132 0 0       0 return 1 if $SUPERLOAD++;
133              
134             # Enable the global hooks
135 0         0 _GLOBAL_HOOKS();
136              
137 0         0 return 1;
138             }
139              
140             sub sugar {
141             # Operate as a function or a method
142 1 50   1 1 19 shift if $_[0] eq 'Class::Autouse';
143              
144             # Ignore calls with no arguments
145 1 50       5 return 1 unless @_;
146              
147 1         3 _debug(\@_) if DEBUG;
148              
149 1         3 foreach my $callback ( grep { $_ } @_ ) {
  1         5  
150             # Handle a callback or regex
151 1 50       6 unless ( ref $callback eq 'CODE' ) {
152 0         0 die(
153             __PACKAGE__
154             . ' takes a code reference for syntactic sugar handlers'
155             . ": unexpected value $callback has type "
156             . ref($callback)
157             );
158             }
159 1         4 push @SUGAR, $callback;
160              
161             # Enable global hooking
162 1         5 _GLOBAL_HOOKS();
163             }
164              
165 1         3 return 1;
166             }
167              
168             # The main autouse sub
169             sub autouse {
170             # Operate as a function or a method
171 2130 50   2130 1 150562 shift if $_[0] eq 'Class::Autouse';
172              
173             # Ignore calls with no arguments
174 2130 100       17710 return 1 unless @_;
175              
176 2124         4321 _debug(\@_) if DEBUG;
177              
178 2124         4987 foreach my $class ( grep { $_ } @_ ) {
  2128         8400  
179 2128 100       6805 if ( ref $class ) {
180 1157 50 66     13262 unless ( ref $class eq 'Regexp' or ref $class eq 'CODE') {
181 0         0 die( __PACKAGE__
182             . ' can autouse explicit class names, or take a regex or subroutine reference'
183             . ": unexpected value $class has type "
184             . ref($class)
185             );
186             }
187 1157         3209 push @LOADERS, $class;
188              
189             # Enable the global hooks
190 1157         4853 _GLOBAL_HOOKS();
191              
192             # Reset shortcut cache, since we may have previously
193             # tried a class and failed, which could now work
194 1157         1614571 %TRIED_CLASS = ( %SPECIAL, %LOADED );
195 1157         113940 next;
196             }
197              
198             # Control flag handling
199 971 100       3618 if ( substr($class, 0, 1) eq ':' ) {
200 1 50       6 if ( $class eq ':superloader' ) {
    50          
    0          
    0          
    0          
201             # Turn on the superloader
202 0         0 Class::Autouse->superloader;
203             } elsif ( $class eq ':devel' ) {
204             # Turn on devel mode
205 1         5 Class::Autouse->devel(1);
206             } elsif ( $class eq ':nostat' ) {
207             # Disable stat checks
208 0         0 $NOSTAT = 1;
209             } elsif ( $class eq ':noprebless') {
210             # Disable support for objects blessed before their class module is loaded
211 0         0 $NOPREBLESS = 1;
212             } elsif ( $class eq ':staticisa') {
213             # Expect that @ISA won't change after loading
214             # This allows some performance tweaks
215 0         0 $STATICISA = 1;
216             }
217 1         7 next;
218             }
219              
220             # Load now if in devel mode, or if its a bad class
221 970 50 33     7277 if ( $DEVEL || $BAD{$class} ) {
222 0         0 Class::Autouse->load($class);
223 0         0 next;
224             }
225              
226             # Does the file for the class exist?
227 970         2911 my $file = _class_file($class);
228 970 100       4081 next if exists $INC{$file};
229 592 50 33     3137 unless ( $NOSTAT or _file_exists($file) ) {
230 0         0 my $inc = join ', ', @INC;
231 0         0 _cry("Can't locate $file in \@INC (\@INC contains: $inc)");
232             }
233              
234             # Don't actually do anything if the superloader is on.
235             # It will catch all AUTOLOAD calls.
236 592 50       2148 next if $SUPERLOAD;
237              
238             # Add the AUTOLOAD hook and %INC lock to prevent 'use'ing
239 592         1235 *{"${class}::AUTOLOAD"} = \&_AUTOLOAD;
  592         9461  
240 592         1826 $INC{$file} = 'Class::Autouse';
241              
242             # When we add the first hook, hijack UNIVERSAL::can/isa
243 592 100       3022 _UPDATE_HOOKS() unless $HOOKS++;
244             }
245              
246 2124         42497 return 1;
247             }
248              
249             # Import behaves the same as autouse
250             sub import {
251 392     392   34628 shift->autouse(@_);
252             }
253              
254              
255              
256              
257              
258             #####################################################################
259             # Explicit Actions
260              
261             # Completely load a class ( The class and all its dependencies ).
262             sub load {
263 576     576 1 1031 _debug(\@_, 1) if DEBUG;
264              
265 576 50       2133 my $class = $_[1] or _cry('No class name specified to load');
266 576 50       1844 return 1 if $LOADED{$class};
267              
268 576         2198 my @search = _super( $class, \&_load );
269              
270             # If called an an array context, return the ISA tree.
271             # In scalar context, just return true.
272 575 100       2376 wantarray ? @search : 1;
273             }
274              
275             # Is a particular class installed in out @INC somewhere
276             # OR is it loaded in our program already
277             sub class_exists {
278 2     2 1 85 _debug(\@_, 1) if DEBUG;
279 2 100       8 _namespace_occupied($_[1]) or _file_exists($_[1]);
280             }
281              
282             # A more general method to answer the question
283             # "Can I call a method on this class and expect it to work"
284             # Returns undef if the class does not exist
285             # Returns 0 if the class is not loaded ( or autouse'd )
286             # Returns 1 if the class can be used.
287             sub can_call_methods {
288 0     0 0 0 _debug(\@_, 1) if DEBUG;
289 0 0       0 _namespace_occupied($_[1]) or exists $INC{_class_file($_[1])};
290             }
291              
292             # Recursive methods currently only work withing the scope of the single @INC
293             # entry containing the "top" module, and will probably stay this way
294              
295             # Autouse not only a class, but all others below it.
296             sub autouse_recursive {
297 2     2 1 16 _debug(\@_, 1) if DEBUG;
298              
299             # Just load if in devel mode
300 2 100       16 return Class::Autouse->load_recursive($_[1]) if $DEVEL;
301              
302             # Don't need to do anything if the super loader is on
303 1 50       5 return 1 if $SUPERLOAD;
304              
305             # Find all the child classes, and hand them to the autouse method
306 1         7 Class::Autouse->autouse( $_[1], _children($_[1]) );
307             }
308              
309             # Load not only a class and all others below it
310             sub load_recursive {
311 1     1 1 3 _debug(\@_, 1) if DEBUG;
312              
313             # Load the parent class, and its children
314 1         5 foreach ( $_[1], _children($_[1]) ) {
315 2         10 Class::Autouse->load($_);
316             }
317              
318 1         5 return 1;
319             }
320              
321              
322              
323              
324              
325             #####################################################################
326             # Symbol Table Hooks
327              
328             # These get hooked to various places on the symbol table,
329             # to enable the autoload functionality
330              
331             # Linked to each individual class via the symbol table
332             sub _AUTOLOAD {
333 121     121   17538 _debug(\@_, 0, ", AUTOLOAD = '$Class::Autouse::AUTOLOAD'") if DEBUG;
334              
335             # Loop detection (just in case)
336 121 50       3606 my $method = $Class::Autouse::AUTOLOAD or _cry('Missing method name');
337 121 50       3742 _cry("Undefined subroutine &$method called") if ++$TRIED_METHOD{$method} > 10;
338              
339             # Don't bother with special classes
340 121         1184 my ($class, $function) = $method =~ m/^(.*)::(.*)\z/s;
341 121 50       418 _cry("Undefined subroutine &$method called") if $SPECIAL{$class};
342              
343             # Load the class and it's dependancies, and get the search path
344 121         1070 my @search = Class::Autouse->load($class);
345              
346             # Find and go to the named method
347             my $found = List::Util::first {
348 299     299   405 defined *{"${_}::$function"}{CODE}
  299         1383  
349 121         1483 } @search;
350 121 100       852 goto &{"${found}::$function"} if $found;
  64         586  
351              
352             # Check for package AUTOLOADs
353 57         347 foreach my $c ( @search ) {
354 119 100       223 if ( defined *{"${c}::AUTOLOAD"}{CODE} ) {
  119         733  
355             # Simulate a normal autoload call
356 57         120 ${"${c}::AUTOLOAD"} = $method;
  57         196  
357 57         98 goto &{"${c}::AUTOLOAD"};
  57         932  
358             }
359             }
360              
361             # Can't find the method anywhere. Throw the same error Perl does.
362 0         0 _cry("Can't locate object method \"$function\" via package \"$class\"");
363             }
364              
365             # This is a special version of the above for use in UNIVERSAL
366             # It does the :superloader, and/or also any regex or callback (code ref) loaders
367             sub _UNIVERSAL_AUTOLOAD {
368 241     241   40812 _debug(\@_, 0, ", \$AUTOLOAD = '$Class::Autouse::AUTOLOAD'") if DEBUG;
369              
370             # Loop detection ( Just in case )
371 241 50       1210 my $method = $Class::Autouse::AUTOLOAD or _cry('Missing method name');
372 241 50       1373 _cry("Undefined subroutine &$method called") if ++$TRIED_METHOD{ $method } > 10;
373              
374             # Don't bother with special classes
375 241         2254 my ($class, $function) = $method =~ m/^(.*)::(.*)\z/s;
376 241 50       852 _cry("Undefined subroutine &$method called") if $SPECIAL{$class};
377              
378 241         502 my @search;
379 241 50       698 if ( $SUPERLOAD ) {
380             # Only try direct loading of the class if the superloader is active.
381             # This might be installed in universal for either the superloader, special loaders, or both.
382              
383             # Load the class and it's dependancies, and get the search path
384 0         0 @search = Class::Autouse->load($class);
385             }
386              
387 241 50       735 unless ( @search ) {
388             # The special loaders will attempt to dynamically instantiate the class.
389             # They will not fire if the superloader is turned on and has already loaded the class.
390 241 100       1003 if ( _try_loaders($class, $function, @_) ) {
391 236         2550 my $fref = $ORIGINAL_CAN->($class, $function);
392 236 100       819 if ( $fref ) {
393 120         1451 goto $fref;
394             } else {
395 116         381 @search = _super($class);
396             }
397             }
398             }
399              
400             # Find and go to the named method
401 121     344   1571 my $found = List::Util::first { defined *{"${_}::$function"}{CODE} } @search;
  344         494  
  344         1516  
402 121 50       773 goto &{"${found}::$function"} if $found;
  0         0  
403              
404             # Check for package AUTOLOADs
405 121         354 foreach my $c ( @search ) {
406 240 100       306 if ( defined *{"${c}::AUTOLOAD"}{CODE} ) {
  240         1422  
407             # Simulate a normal autoload call
408 114         192 ${"${c}::AUTOLOAD"} = $method;
  114         378  
409 114         193 goto &{"${c}::AUTOLOAD"};
  114         1739  
410             }
411             }
412              
413 7         43 for my $callback ( @SUGAR ) {
414 3         25 my $rv = $callback->( $class, $function, @_ );
415 3 50       50 goto $rv if $rv;
416             }
417              
418             # Can't find the method anywhere. Throw the same error Perl does.
419 4         20 _cry("Can't locate object method \"$function\" via package \"$class\"");
420             }
421              
422             # This just handles the call and does nothing.
423             # It prevents destroy calls going through to the AUTOLOAD hooks.
424             sub _UNIVERSAL_DESTROY {
425 420258     420258   1445459 _debug(\@_) if DEBUG;
426             }
427              
428             sub _isa {
429             # Optional performance hack
430 624 50 66 624   13064 goto $ORIGINAL_ISA if ref $_[0] and $NOPREBLESS;
431              
432             # Load the class, unless we are sure it is already
433 624   100     2429 my $class = ref $_[0] || $_[0] || return undef;
434 622 100 66     2674 unless ( $TRIED_CLASS{$class} or $LOADED{$class} ) {
435 196         990 _preload($_[0]);
436             }
437              
438 622         925 goto &{$ORIGINAL_ISA};
  622         1655960  
439             }
440              
441             # This is the replacement for UNIVERSAL::can
442             sub _can {
443             # Optional performance hack
444 12797 50 66 12797   60754 goto $ORIGINAL_CAN if ref $_[0] and $NOPREBLESS;
445              
446             # Load the class, unless we are sure it is already
447 12797   100     27557 my $class = ref $_[0] || $_[0] || return undef;
448 12796 100 66     31154 unless ( $TRIED_CLASS{$class} or $LOADED{$class} ) {
449 214         986 _preload($_[0]);
450             }
451              
452 12795         22892 goto &{$ORIGINAL_CAN};
  12795         113911  
453             }
454              
455              
456              
457              
458              
459             #####################################################################
460             # Support Functions
461              
462             sub _preload {
463 2128     2128   4248 _debug(\@_) if DEBUG;
464              
465             # Does it look like a package?
466 2128   66     8179 my $class = ref $_[0] || $_[0];
467 2128 100 66     24567 unless ( $class and $class =~ /^[^\W\d]\w*(?:(?:\'|::)[^\W]\w*)*$/o ) {
468 3         13 return $LOADED{$class} = 1;
469             }
470              
471             # Do we try to load the class
472 2125         3464 my $load = 0;
473 2125         7186 my $file = _class_file($class);
474 2125 100 100     15693 if ( defined $INC{$file} and $INC{$file} eq 'Class::Autouse' ) {
    50          
    0          
475             # It's an autoused class
476 453         1543 $load = 1;
477             } elsif ( ! $SUPERLOAD ) {
478             # Superloader isn't on, don't load
479 1672         3470 $load = 0;
480             } elsif ( _namespace_occupied($class) ) {
481             # Superloader is on, but there is something already in the class
482             # This can't be the autouse loader, because we would have caught
483             # that case already.
484 0         0 $load = 0;
485             } else {
486             # The rules of the superloader say we assume loaded unless we can
487             # tell otherwise. Thus, we have to have a go at loading.
488 0         0 $load = 1;
489             }
490              
491             # If needed, load the class and all its dependencies.
492 2125 100       8260 Class::Autouse->load($class) if $load;
493              
494 2124 100       6954 unless ( $LOADED{$class} ) {
495 1431         4583 _try_loaders($class);
496 1431 100       4811 unless ( $LOADED{$class} ) {
497 38 100       63 if ( _namespace_occupied($class) ) {
498             # The class is not flagged as loaded by autouse, but exists
499             # to ensure its ancestry is loaded before calling $orig
500 1         2 $LOADED{$class} = 1;
501 1         3 _load_ancestors($class);
502             }
503             }
504             }
505              
506 2124         5792 return 1;
507             }
508              
509             sub _try_loaders {
510 1672     1672   2811 _debug(\@_, 0) if DEBUG;
511 1672         4072 my ($class, $function, @optional_args) = @_;
512             # The function and args are only present to help callbacks whose main goal is to
513             # do "syntactic sugar" instead of really writing a class
514              
515             # This allows us to shortcut out of re-checking a class
516 1672         7312 $TRIED_CLASS{$class}++;
517              
518 1672 100       5512 if ( _namespace_occupied($class) ) {
519 506         1344 $LOADED{$class} = 1;
520 506         2135 _load_ancestors($class);
521 506         1435 return 1;
522             }
523              
524             # Try each of the special loaders, if there are any.
525 1166         3363 for my $loader ( @LOADERS ) {
526 645621         1132512 my $ref = ref($loader);
527 645621 50       1050230 if ( $ref ) {
528 645621 100       1282393 if ( $ref eq "Regexp" ) {
    50          
529 275587 100       1427538 next unless $class =~ $loader;
530 586         2585 my $file = _class_file($class);
531 586 100       2623 next unless grep { -e $_ . '/' . $file } @INC;
  6446         187239  
532 559         3948 local $^W = 0;
533 559         1784 local $@;
534 559     1   62650 eval "use $class";
  1     1   9  
  1     1   555  
  1     1   2  
  1     1   12  
  1     1   636  
  1     1   3  
  1     1   15  
  1     1   616  
  1     1   3  
  1     1   10  
  1     1   509  
  1     1   3  
  1     1   10  
  1     1   580  
  1     1   3  
  1     1   13  
  1     1   540  
  1     1   3  
  1     1   13  
  1     1   559  
  1     1   3  
  1     1   12  
  1     1   548  
  1     1   2  
  1     1   14  
  1     1   621  
  1     1   3  
  1     1   15  
  1     1   557  
  1     1   3  
  1     1   13  
  1     1   674  
  1     1   2  
  1     1   15  
  1     1   430  
  1     1   2  
  1     1   9  
  1     1   677  
  1     1   3  
  1     1   15  
  1     1   584  
  1     1   2  
  1     1   13  
  1     1   560  
  1     1   2  
  1     1   12  
  1     1   578  
  1     1   3  
  1     1   11  
  1     1   533  
  1     1   3  
  1     1   10  
  1     1   510  
  1     1   3  
  1     1   10  
  1     1   489  
  1     1   3  
  1     1   13  
  1     1   649  
  1     1   3  
  1     1   10  
  1     1   543  
  1     1   2  
  1     1   11  
  1     1   535  
  1     1   4  
  1     1   13  
  1     1   491  
  1     1   3  
  1     1   13  
  1     1   705  
  1     1   3  
  1     1   11  
  1     1   582  
  1     1   3  
  1     1   10  
  1     1   554  
  1     1   3  
  1     1   8  
  1     1   524  
  1     1   4  
  1     1   10  
  1     1   566  
  1     1   2  
  1     1   10  
  1     1   622  
  1     1   3  
  1     1   11  
  1     1   725  
  1     1   3  
  1     1   12  
  1     1   579  
  1     1   3  
  1     1   9  
  1     1   705  
  1     1   2  
  1     1   12  
  1     1   657  
  1     1   4  
  1     1   12  
  1     1   593  
  1     1   2  
  1     1   11  
  1     1   538  
  1     1   3  
  1     1   11  
  1     1   557  
  1     1   3  
  1     1   9  
  1     1   658  
  1     1   3  
  1     1   12  
  1     1   542  
  1     1   4  
  1     1   11  
  1     1   604  
  1     1   3  
  1     1   10  
  1     1   640  
  1     1   3  
  1     1   13  
  1     1   697  
  1     1   3  
  1     1   14  
  1     1   595  
  1     1   2  
  1     1   13  
  1     1   641  
  1     1   3  
  1     1   13  
  1     1   539  
  1     1   3  
  1     1   13  
  1     1   696  
  1     1   3  
  1     1   11  
  1     1   590  
  1     1   4  
  1     1   11  
  1     1   659  
  1     1   3  
  1     1   12  
  1     1   624  
  1     1   3  
  1     1   10  
  1     1   659  
  1     1   3  
  1     1   14  
  1     1   653  
  1     1   4  
  1     1   12  
  1     1   684  
  1     1   3  
  1     1   11  
  1     1   671  
  1     1   3  
  1     1   12  
  1     1   646  
  1     1   3  
  1     1   11  
  1     1   624  
  1     1   3  
  1     1   11  
  1     1   565  
  1     1   2  
  1     1   9  
  1     1   580  
  1     1   4  
  1     1   16  
  1     1   573  
  1     1   5  
  1     1   12  
  1     1   636  
  1     1   3  
  1     1   14  
  1     1   571  
  1     1   3  
  1     1   10  
  1     1   549  
  1     1   4  
  1     1   14  
  1     1   617  
  1     1   3  
  1     1   11  
  1     1   707  
  1     1   3  
  1     1   18  
  1     1   618  
  1     1   3  
  1     1   14  
  1     1   755  
  1     1   3  
  1     1   208  
  1     1   635  
  1     1   4  
  1     1   12  
  1     1   730  
  1     1   5  
  1     1   17  
  1     1   623  
  1     1   4  
  1     1   14  
  1     1   650  
  1     1   3  
  1     1   13  
  1     1   727  
  1     1   3  
  1     1   12  
  1     1   549  
  1     1   4  
  1     1   13  
  1     1   589  
  1     1   5  
  1     1   10  
  1     1   1164  
  1     1   3  
  1     1   16  
  1     1   758  
  1     1   3  
  1     1   13  
  1     1   813  
  1     1   3  
  1     1   16  
  1     1   650  
  1     1   3  
  1     1   14  
  1     1   727  
  1     1   3  
  1     1   14  
  1     1   610  
  1     1   3  
  1     1   13  
  1     1   947  
  1     1   3  
  1     1   15  
  1     1   638  
  1     1   3  
  1     1   13  
  1     1   924  
  1     1   3  
  1     1   14  
  1     1   766  
  1     1   3  
  1     1   13  
  1     1   876  
  1     1   4  
  1     1   18  
  1     1   1554  
  1     1   83  
  1     1   15  
  1     1   1350  
  1     1   4  
  1     1   16  
  1     1   829  
  1     1   3  
  1     1   140  
  1     1   1194  
  1     1   3  
  1     1   13  
  1     1   856  
  1     1   2  
  1     1   15  
  1     1   671  
  1     1   3  
  1     1   15  
  1     1   609  
  1     1   3  
  1     1   41  
  1     1   557  
  1     1   2  
  1     1   14  
  1     1   576  
  1     1   5  
  1     1   13  
  1     1   657  
  1     1   2  
  1     1   16  
  1     1   564  
  1     1   3  
  1     1   13  
  1     1   642  
  1     1   3  
  1     1   16  
  1     1   558  
  1     1   3  
  1     1   17  
  1     1   576  
  1     1   3  
  1     1   15  
  1     1   711  
  1     1   4  
  1     1   18  
  1     1   710  
  1     1   3  
  1     1   15  
  1     1   807  
  1     1   5  
  1     1   17  
  1     1   671  
  1     1   3  
  1     1   15  
  1     1   726  
  1     1   3  
  1     1   15  
  1     1   710  
  1     1   3  
  1     1   16  
  1     1   680  
  1     1   4  
  1     1   15  
  1     1   786  
  1     1   2  
  1     1   14  
  1     1   714  
  1     1   4  
  1     1   16  
  1     1   715  
  1     1   3  
  1     1   15  
  1     1   908  
  1     1   4  
  1     1   64  
  1     1   6442  
  1     1   3  
  1     1   15  
  1     1   685  
  1     1   3  
  1     1   15  
  1     1   694  
  1     1   4  
  1     1   14  
  1     1   526  
  1     1   4  
  1     1   9  
  1     1   620  
  1     1   3  
  1     1   13  
  1     1   824  
  1     1   4  
  1     1   80  
  1     1   597  
  1     1   3  
  1     1   13  
  1     1   1143  
  1     1   3  
  1     1   13  
  1     1   629  
  1     1   3  
  1     1   11  
  1     1   647  
  1     1   4  
  1     1   11  
  1     1   644  
  1     1   4  
  1     1   10  
  1     1   606  
  1     1   5  
  1     1   12  
  1     1   634  
  1     1   3  
  1     1   13  
  1     1   937  
  1     1   3  
  1     1   12  
  1     1   644  
  1     1   2  
  1     1   12  
  1     1   667  
  1     1   4  
  1     1   22  
  1     1   662  
  1     1   5  
  1     1   13  
  1     1   746  
  1     1   3  
  1     1   15  
  1     1   672  
  1     1   5  
  1     1   13  
  1     1   660  
  1     1   5  
  1     1   18  
  1     1   585  
  1     1   4  
  1     1   14  
  1     1   857  
  1     1   2  
  1     1   15  
  1     1   493  
  1     1   3  
  1     1   12  
  1     1   677  
  1     1   2  
  1     1   15  
  1     1   713  
  1     1   4  
  1     1   13  
  1     1   776  
  1     1   4  
  1     1   13  
  1     1   694  
  1     1   3  
  1     1   16  
  1     1   729  
  1     1   3  
  1     1   14  
  1     1   482  
  1     1   2  
  1     1   11  
  1     1   787  
  1     1   4  
  1     1   15  
  1     1   666  
  1     1   2  
  1     1   18  
  1     1   752  
  1     1   4  
  1     1   13  
  1     1   631  
  1     1   3  
  1     1   11  
  1     1   654  
  1     1   4  
  1     1   13  
  1     1   677  
  1     1   2  
  1     1   19  
  1     1   690  
  1     1   2  
  1     1   15  
  1     1   745  
  1     1   3  
  1     1   14  
  1     1   900  
  1     1   2  
  1     1   13  
  1     1   662  
  1     1   3  
  1     1   11  
  1     1   623  
  1     1   2  
  1     1   14  
  1     1   455  
  1     1   3  
  1     1   11  
  1     1   541  
  1     1   2  
  1     1   12  
  1     1   486  
  1     1   2  
  1     1   11  
  1     1   506  
  1     1   3  
  1     1   13  
  1     1   532  
  1     1   2  
  1     1   13  
  1     1   693  
  1     1   3  
  1     1   13  
  1     1   509  
  1     1   3  
  1     1   14  
  1     1   648  
  1     1   4  
  1     1   12  
  1     1   617  
  1     1   5  
  1     1   13  
  1     1   741  
  1     1   3  
  1     1   15  
  1     1   663  
  1     1   3  
  1     1   12  
  1     1   988  
  1     1   4  
  1     1   14  
  1     1   580  
  1     1   4  
  1     1   13  
  1     1   708  
  1     1   3  
  1     1   14  
  1     1   627  
  1     1   4  
  1     1   13  
  1     1   711  
  1     1   3  
  1     1   16  
  1     1   565  
  1     1   7  
  1     1   12  
  1     1   6636  
  1     1   3  
  1     1   14  
  1     1   680  
  1     1   3  
  1     1   15  
  1     1   685  
  1     1   3  
  1     1   13  
  1     1   719  
  1     1   41  
  1     1   16  
  1     1   844  
  1     1   4  
  1     1   49  
  1     1   611  
  1     1   4  
  1     1   14  
  1     1   1048  
  1     1   3  
  1     1   18  
  1     1   1271  
  1     1   3  
  1     1   15  
  1     1   977  
  1     1   4  
  1     1   28  
  1     1   785  
  1     1   3  
  1     1   20  
  1     1   686  
  1     1   3  
  1     1   12  
  1     1   545  
  1     1   2  
  1     1   11  
  1     1   652  
  1     1   4  
  1     1   12  
  1     1   679  
  1     1   3  
  1     1   12  
  1     1   513  
  1     1   2  
  1     1   10  
  1     1   564  
  1     1   3  
  1     1   12  
  1     1   535  
  1     1   3  
  1     1   11  
  1     1   572  
  1     1   3  
  1     1   11  
  1     1   729  
  1     1   3  
  1     1   14  
  1     1   657  
  1     1   3  
  1     1   14  
  1     1   547  
  1     1   3  
  1     1   13  
  1         522  
  1         5  
  1         14  
  1         626  
  1         3  
  1         16  
  1         552  
  1         2  
  1         14  
  1         526  
  1         2  
  1         14  
  1         540  
  1         4  
  1         14  
  1         543  
  1         3  
  1         13  
  1         564  
  1         4  
  1         14  
  1         537  
  1         4  
  1         15  
  1         446  
  1         4  
  1         12  
  1         856  
  1         3  
  1         18  
  1         785  
  1         2  
  1         16  
  1         791  
  1         2  
  1         16  
  1         841  
  1         3  
  1         23  
  1         789  
  1         3  
  1         19  
  1         776  
  1         3  
  1         18  
  1         750  
  1         3  
  1         17  
  1         736  
  1         4  
  1         16  
  1         782  
  1         3  
  1         16  
  1         774  
  1         4  
  1         15  
  1         782  
  1         3  
  1         17  
  1         768  
  1         3  
  1         18  
  1         635  
  1         3  
  1         11  
  1         687  
  1         3  
  1         11  
  1         705  
  1         4  
  1         12  
  1         736  
  1         3  
  1         11  
  1         757  
  1         4  
  1         11  
  1         699  
  1         2  
  1         11  
  1         10341  
  1         3  
  1         13  
  1         1265  
  1         4  
  1         12  
  1         1146  
  1         3  
  1         11  
  1         841  
  1         4  
  1         14  
  1         1504  
  1         3  
  1         12  
  1         974  
  1         5  
  1         11  
  1         828  
  1         3  
  1         15  
  1         786  
  1         3  
  1         14  
  1         1033  
  1         4  
  1         17  
  1         755  
  1         3  
  1         13  
  1         889  
  1         4  
  1         15  
  1         716  
  1         3  
  1         17  
  1         740  
  1         3  
  1         14  
  1         733  
  1         3  
  1         14  
  1         846  
  1         3  
  1         15  
  1         851  
  1         3  
  1         14  
  1         646  
  1         4  
  1         14  
  1         733  
  1         3  
  1         13  
  1         769  
  1         3  
  1         13  
  1         1219  
  1         3  
  1         11  
  1         777  
  1         2  
  1         14  
  1         678  
  1         2  
  1         15  
  1         6923  
  1         3  
  1         12  
  1         719  
  1         3  
  1         18  
  1         1081  
  1         3  
  1         14  
  1         1123  
  1         3  
  1         13  
  1         743  
  1         4  
  1         12  
  1         639  
  1         3  
  1         14  
  1         668  
  1         2  
  1         14  
  1         720  
  1         2  
  1         12  
  1         822  
  1         3  
  1         14  
  1         764  
  1         4  
  1         16  
  1         718  
  1         3  
  1         15  
  1         711  
  1         3  
  1         18  
  1         721  
  1         3  
  1         13  
  1         712  
  1         3  
  1         16  
  1         697  
  1         2  
  1         14  
  1         771  
  1         3  
  1         16  
  1         731  
  1         3  
  1         13  
  1         771  
  1         3  
  1         18  
  1         757  
  1         4  
  1         13  
  1         722  
  1         2  
  1         15  
  1         724  
  1         4  
  1         13  
  1         692  
  1         2  
  1         20  
  1         710  
  1         3  
  1         12  
  1         697  
  1         3  
  1         18  
  1         663  
  1         3  
  1         12  
  1         742  
  1         3  
  1         20  
  1         689  
  1         3  
  1         15  
  1         655  
  1         3  
  1         14  
  1         643  
  1         3  
  1         14  
  1         754  
  1         4  
  1         77  
  1         555  
  1         2  
  1         13  
  1         591  
  1         3  
  1         12  
  1         574  
  1         2  
  1         11  
  1         653  
  1         3  
  1         12  
  1         658  
  1         4  
  1         12  
  1         688  
  1         4  
  1         14  
  1         660  
  1         4  
  1         11  
  1         687  
  1         3  
  1         15  
  1         710  
  1         2  
  1         13  
  1         615  
  1         2  
  1         10  
  1         649  
  1         4  
  1         12  
  1         661  
  1         3  
  1         14  
  1         663  
  1         5  
  1         13  
  1         789  
  1         2  
  1         13  
  1         657  
  1         2  
  1         11  
  1         646  
  1         3  
  1         11  
  1         930  
  1         5  
  1         13  
  1         833  
  1         3  
  1         15  
  1         700  
  1         3  
  1         16  
  1         886  
  1         3  
  1         13  
  1         643  
  1         3  
  1         17  
  1         851  
  1         4  
  1         15  
  1         726  
  1         4  
  1         14  
  1         605  
  1         2  
  1         12  
  1         695  
  1         3  
  1         13  
  1         670  
  1         3  
  1         14  
  1         876  
  1         3  
  1         13  
  1         716  
  1         4  
  1         15  
  1         756  
  1         3  
  1         12  
  1         668  
  1         3  
  1         13  
  1         701  
  1         3  
  1         12  
  1         813  
  1         3  
  1         14  
  1         677  
  1         2  
  1         12  
  1         585  
  1         3  
  1         10  
  1         684  
  1         5  
  1         13  
  1         789  
  1         3  
  1         15  
  1         805  
  1         3  
  1         10  
  1         735  
  1         2  
  1         12  
  1         719  
  1         5  
  1         13  
  1         1034  
  1         3  
  1         19  
  1         716  
  1         4  
  1         14  
  1         680  
  1         6  
  1         18  
  1         664  
  1         3  
  1         13  
  1         726  
  1         4  
  1         19  
  1         696  
  1         3  
  1         12  
  1         742  
  1         3  
  1         17  
  1         720  
  1         3  
  1         12  
  1         788  
  1         3  
  1         19  
  1         732  
  1         4  
  1         14  
  1         852  
  1         4  
  1         21  
  1         939  
  1         3  
  1         14  
  1         1023  
  1         3  
  1         19  
  1         791  
  1         4  
  1         13  
  1         831  
  1         3  
  1         22  
  1         729  
  1         4  
  1         14  
  1         716  
  1         3  
  1         19  
  1         737  
  1         3  
  1         15  
  1         733  
  1         2  
  1         20  
  1         1507  
  1         3  
  1         15  
  1         939  
  1         3  
  1         18  
  1         731  
  1         3  
  1         13  
  1         730  
  1         2  
  1         15  
  1         657  
  1         3  
  1         12  
  1         690  
  1         3  
  1         12  
  1         670  
  1         3  
  1         14  
  1         616  
  1         3  
  1         13  
  1         660  
  1         3  
  1         16  
  1         649  
  1         2  
  1         15  
  1         716  
  1         3  
  1         13  
  1         813  
  1         3  
  1         16  
  1         820  
  1         3  
  1         18  
  1         728  
  1         4  
  1         16  
  1         723  
  1         4  
  1         15  
  1         742  
  1         3  
  1         16  
  1         764  
  1         4  
  1         16  
  1         790  
  1         4  
  1         17  
  1         726  
  1         3  
  1         12  
  1         658  
  1         3  
  1         13  
  1         604  
  1         2  
  1         13  
  1         658  
  1         2  
  1         12  
  1         624  
  1         3  
  1         13  
  1         729  
  1         3  
  1         32  
  1         638  
  1         3  
  1         12  
  1         606  
  1         2  
  1         11  
  1         756  
  1         3  
  1         15  
  1         828  
  1         3  
  1         15  
  1         860  
  1         5  
  1         16  
  1         747  
  1         4  
  1         14  
  1         1060  
  1         19  
  1         13  
  1         883  
  1         6  
  1         16  
  1         658  
  1         2  
  1         12  
  1         724  
  1         3  
  1         13  
  1         790  
  1         3  
  1         16  
  1         773  
  1         3  
  1         13  
  1         705  
  1         2  
  1         12  
  1         658  
  1         3  
  1         12  
  1         657  
  1         3  
  1         15  
  1         677  
  1         2  
  1         13  
  1         642  
  1         3  
  1         11  
  1         723  
  1         3  
  1         17  
  1         4598  
  1         2  
  1         12  
  1         702  
  1         2  
  1         20  
  1         746  
  1         5  
  1         14  
  1         647  
  1         3  
  1         14  
  1         636  
  1         3  
  1         11  
  1         801  
  1         4  
  1         18  
  1         812  
  1         5  
  1         15  
  1         780  
  1         5  
  1         17  
  1         812  
  1         3  
  1         15  
  1         832  
  1         3  
  1         19  
  1         793  
  1         3  
  1         13  
  1         829  
  1         3  
  1         17  
  1         683  
  1         2  
  1         13  
  1         687  
  1         3  
  1         19  
  1         680  
  1         2  
  1         16  
  1         805  
  1         3  
  1         18  
  1         815  
  1         3  
  1         15  
  1         656  
  1         3  
  1         15  
  1         615  
  1         2  
  1         12  
  1         683  
  1         4  
  1         16  
  1         688  
  1         2  
  1         11  
  1         699  
  1         4  
  1         16  
  1         663  
  1         2  
  1         13  
  1         602  
  1         3  
  1         11  
  1         672  
  1         2  
  1         13  
  1         864  
  1         3  
  1         13  
  1         1062  
  1         2  
  1         13  
  1         618  
  1         3  
  1         11  
  1         1056  
  1         2  
  1         13  
  1         735  
  1         3  
  1         13  
  1         756  
  1         3  
  1         15  
  1         708  
  1         3  
  1         14  
  1         634  
  1         4  
  1         14  
  1         580  
  1         3  
  1         10  
  1         632  
  1         4  
  1         12  
  1         614  
  1         3  
  1         12  
  1         587  
  1         2  
  1         12  
  1         616  
  1         2  
  1         13  
  1         767  
  1         4  
  1         14  
  1         545  
  1         2  
  1         12  
  1         686  
  1         3  
  1         13  
  1         639  
  1         5  
  1         13  
  1         651  
  1         4  
  1         14  
  1         654  
  1         3  
  1         12  
  1         605  
  1         4  
  1         12  
  1         768  
  1         4  
  1         13  
  1         748  
  1         3  
  1         14  
  1         716  
  1         2  
  1         16  
  1         679  
  1         3  
  1         12  
  1         733  
  1         4  
  1         14  
  1         667  
  1         3  
  1         13  
  1         695  
  1         4  
  1         13  
  1         662  
  1         3  
  1         12  
  1         684  
  1         2  
  1         12  
  1         856  
  1         5  
  1         16  
  1         797  
  1         2  
  1         14  
  1         677  
  1         3  
  1         14  
  1         723  
  1         3  
  1         12  
  1         673  
  1         3  
  1         13  
  1         776  
  1         3  
  1         18  
  1         725  
  1         3  
  1         13  
  1         750  
  1         4  
  1         16  
  1         702  
  1         3  
  1         14  
  1         715  
  1         4  
  1         89  
  1         618  
  1         2  
  1         12  
  1         820  
  1         2  
  1         23  
  1         729  
  1         3  
  1         15  
  1         687  
  1         3  
  1         17  
  1         655  
  1         2  
  1         15  
  1         724  
  1         2  
  1         17  
  1         625  
  1         3  
  1         13  
  1         654  
  1         3  
  1         40  
  1         777  
  1         4  
  1         14  
  1         666  
  1         4  
  1         15  
  1         710  
  1         4  
  1         15  
  1         675  
  1         2  
  1         15  
  1         880  
  1         4  
  1         14  
  1         933  
  1         3  
  1         17  
  1         715  
  1         3  
  1         13  
  1         7090  
  1         4  
  1         19  
  1         652  
  1         2  
  1         13  
  1         831  
  1         3  
  1         16  
  1         691  
  1         4  
  1         16  
  1         694  
  1         7  
  1         15  
  1         726  
  1         3  
  1         15  
  1         735  
  1         3  
  1         14  
  1         869  
  1         3  
  1         13  
  1         1760  
  1         3  
  1         13  
  1         613  
  1         3  
  1         12  
  1         650  
  1         2  
  1         11  
  1         689  
  1         3  
  1         12  
  1         603  
  1         5  
  1         12  
  1         837  
  1         3  
  1         13  
  1         561  
  1         3  
  1         11  
  1         696  
  1         4  
  1         16  
  1         698  
  1         2  
  1         12  
  1         730  
  1         3  
  1         15  
  1         708  
  1         3  
  1         11  
  1         632  
  1         4  
  1         16  
  1         628  
  1         2  
  1         10  
  1         944  
  1         5  
  1         14  
  1         694  
  1         3  
  1         14  
  1         1225  
  1         3  
  1         15  
  1         664  
  1         4  
  1         12  
  1         723  
  1         4  
  1         15  
  1         670  
  1         3  
  1         14  
  1         949  
  1         4  
  1         16  
  1         703  
  1         3  
  1         14  
  1         688  
  1         3  
  1         14  
  1         679  
  1         3  
  1         13  
  1         1039  
  1         4  
  1         14  
  1         669  
  1         2  
  1         13  
  1         658  
  1         4  
  1         14  
  1         678  
  1         3  
  1         14  
  1         636  
  1         4  
  1         13  
  1         632  
  1         2  
  1         12  
  1         725  
  1         3  
  1         15  
  1         659  
  1         5  
  1         14  
  1         6539  
  1         2  
  1         15  
  1         706  
  1         3  
  1         13  
  1         751  
  1         4  
  1         15  
  1         768  
  1         3  
  1         14  
  1         643  
  1         4  
  1         13  
  1         733  
  1         3  
  1         16  
  1         681  
  1         3  
  1         15  
  1         716  
  1         3  
  1         15  
  1         605  
  1         3  
  1         13  
  1         747  
  1         4  
  1         15  
  1         877  
  1         3  
  1         12  
  1         738  
  1         3  
  1         51  
  1         730  
  1         4  
  1         14  
  1         685  
  1         3  
  1         14  
  1         8935  
  1         5  
  1         16  
  1         9000  
  1         3  
  1         16  
  1         757  
  1         4  
  1         12  
  1         770  
  1         3  
  1         15  
  1         714  
  1         3  
  1         14  
  1         688  
  1         3  
  1         13  
  1         1142  
  1         3  
  1         13  
  1         686  
  1         3  
  1         14  
  1         708  
  1         3  
  1         13  
  1         712  
  1         3  
  1         14  
  1         675  
  1         4  
  1         12  
  1         573  
  1         2  
  1         11  
  1         642  
  1         2  
  1         13  
  1         540  
  1         3  
  1         11  
  1         784  
  1         3  
  1         16  
  1         764  
  1         4  
  1         15  
  1         701  
  1         3  
  1         17  
  1         934  
  1         4  
  1         13  
  1         740  
  1         3  
  1         15  
  1         702  
  1         3  
  1         13  
  1         10755  
  1         3  
  1         17  
  1         9738  
  1         3  
  1         19  
  1         964  
  1         3  
  1         15  
  1         697  
  1         3  
  1         12  
  1         832  
  1         2  
  1         18  
  1         931  
  1         2  
  1         16  
  1         748  
  1         3  
  1         13  
  1         861  
  1         3  
  1         18  
  1         729  
  1         5  
  1         16  
  1         603  
  1         2  
  1         12  
  1         665  
  1         3  
  1         18  
  1         743  
  1         2  
  1         14  
  1         719  
  1         3  
  1         13  
  1         645  
  1         4  
  1         20  
  1         593  
  1         3  
  1         12  
  1         561  
  1         2  
  1         13  
  1         631  
  1         3  
  1         17  
  1         700  
  1         3  
  1         14  
  1         670  
  1         3  
  1         14  
  1         694  
  1         3  
  1         18  
  1         641  
  1         2  
  1         12  
  1         583  
  1         2  
  1         12  
  1         667  
  1         3  
  1         16  
  1         625  
  1         3  
  1         12  
  1         746  
  1         3  
  1         13  
  1         1007  
  1         5  
  1         14  
  1         618  
  1         3  
  1         11  
  1         619  
  1         4  
  1         15  
  1         612  
  1         3  
  1         53  
  1         690  
  1         3  
  1         11  
  1         601  
  1         3  
  1         14  
  1         678  
  1         2  
  1         16  
  1         653  
  1         3  
  1         12  
  1         567  
  1         3  
  1         11  
  1         689  
  1         3  
  1         18  
  1         1049  
  1         6  
  1         17  
  1         638  
  1         3  
  1         11  
  1         791  
  1         5  
  1         19  
535 559 50       10613 die "Class::Autouse found module $file for class $class matching regex '$loader',"
536             . " but it failed to compile with the following error: $@" if $@;
537             } elsif ( $ref eq "CODE" ) {
538 370034 100       1189331 unless ( $loader->( $class,$function,@optional_args ) ) {
539 369470         3373862 next;
540             }
541             } else {
542 0         0 die "Unexpected loader. Expected qr//, sub{}, or class name string."
543             }
544 1123         194624 $LOADED{$class} = 1;
545 1123         4751 _load_ancestors($class);
546 1123         4059 return 1;
547             } else {
548 0         0 die "Odd loader $loader passed to " . __PACKAGE__;
549             }
550             }
551              
552 43         102 return;
553             }
554              
555             # This is called after any class is hit by load/preload to ensure that parent classes are also loaded
556             sub _load_ancestors {
557 2204     2204   4974 _debug(\@_, 0) if DEBUG;
558 2204         5346 my $class = $_[0];
559 2204         8952 my ($this_class,@ancestors) = _super($class);
560 2204         5485 for my $ancestor ( @ancestors ) {
561             # this is a bit ugly, _preload presumes either isa or can is being called,
562             # and does a goto at the end of it, we just want the core logic, not the redirection
563             # so we pass undef as the subref parameter
564 1718         5455 _preload($ancestor);
565             }
566 2204 50       6253 if ( $STATICISA ) {
567             # Optional performance optimization.
568             # After we have the entire ancestry,
569             # set the greatest grandparent's can/isa to the originals.
570             # This keeps the versions in this module from being used where they're not needed.
571 0   0     0 my $final_parent = $ancestors[-1] || $this_class;
572 13     13   143 no strict 'refs';
  13         24  
  13         40096  
573 0         0 *{ $final_parent . '::can'} = $ORIGINAL_CAN;
  0         0  
574 0         0 *{ $final_parent . '::isa'} = $ORIGINAL_ISA;
  0         0  
575             }
576 2204         4478 return 1;
577             }
578              
579             # This walks the @ISA tree, optionally calling a subref on each class
580             # and returns the inherited classes in a list, including $class itself.
581             sub _super {
582 2896     2896   3935 _debug(\@_) if DEBUG;
583 2896         4925 my $class = shift;
584 2896         4901 my $load = shift;
585 2896         7385 my @stack = ( $class );
586 2896         7566 my %seen = ( UNIVERSAL => 1 );
587 2896         4649 my @search = ();
588              
589 2896         9580 while ( my $c = shift @stack ) {
590 5459 100       19183 next if $seen{$c}++;
591              
592             # This may load the class in question, so
593             # we call it before checking @ISA.
594 5437 100 100     18677 if ( $load and not $LOADED{$c} ) {
595 597         1955 $load->($c);
596             }
597              
598             # Add the class to the search list,
599             # and add the @ISA to the load stack.
600 5436         17949 push @search, $c;
601 5436         8979 unshift @stack, @{"${c}::ISA"};
  5436         30853  
602             }
603              
604 2895         15355 return @search;
605             }
606              
607             # Load a single class
608             sub _load ($) {
609 597     597   972 _debug(\@_) if DEBUG;
610              
611             # Don't attempt to load special classes
612 597 50       2133 my $class = shift or _cry('Did not specify a class to load');
613 597         1759 $TRIED_CLASS{$class}++;
614              
615 597 50       1941 return 1 if $SPECIAL{$class};
616              
617             # Run some checks
618 597         1380 my $file = _class_file($class);
619 597 100       1784 if ( defined $INC{$file} ) {
    50          
620             # If the %INC lock is set to any other value, the file is
621             # already loaded. We do not need to do anything.
622 596 100       2066 if ( $INC{$file} ne 'Class::Autouse') {
623 22         84 return $LOADED{$class} = 1;
624             }
625              
626             # Because we autoused it earlier, we know the file for this
627             # class MUST exist.
628             # Removing the AUTOLOAD hook and %INC lock is all we have to do
629 574         986 delete ${"${class}::"}{'AUTOLOAD'};
  574         4140  
630 574         1821 delete $INC{$file};
631              
632             } elsif ( not _file_exists($file) ) {
633             # We might still be loaded, if the class was defined
634             # in some other module without it's own file.
635 0 0       0 if ( _namespace_occupied($class) ) {
636 0         0 return $LOADED{$class} = 1;
637             }
638              
639             # Not loaded and no file either.
640             # Try to generate the class instead.
641 0 0       0 if ( _try_loaders($class) ) {
642 0         0 return 1;
643             }
644              
645             # We've run out of options, it just doesn't exist
646 0         0 my $inc = join ', ', @INC;
647 0         0 _cry("Can't locate $file in \@INC (\@INC contains: $inc)");
648             }
649              
650             # Load the file for this class
651 575         881 print _depth(1) . " Class::Autouse::load -> Loading in $file\n" if DEBUG;
652 575         932 eval {
653 575         405397 CORE::require($file);
654             };
655 575 100       3402 _cry($@) if $@;
656              
657             # Give back UNIVERSAL::can/isa if there are no other hooks
658 574 100       2339 --$HOOKS or _UPDATE_HOOKS();
659              
660 574         1739 $LOADED{$class} = 1;
661 574         2110 _load_ancestors($class);
662 574         991 return 1;
663             }
664              
665             # Find all the child classes for a parent class.
666             # Returns in the list context.
667             sub _children ($) {
668 2     2   6 _debug(\@_) if DEBUG;
669              
670             # Find where it is in @INC
671 2         10 my $base_file = _class_file(shift);
672             my $inc_path = List::Util::first {
673 2     2   127 -f File::Spec->catfile($_, $base_file)
674 2 50       43 } @INC or return;
675              
676             # Does the file have a subdirectory
677             # i.e. Are there child classes
678 2         18 my $child_path = substr( $base_file, 0, length($base_file) - 3 );
679 2         14 my $child_path_full = File::Spec->catdir( $inc_path, $child_path );
680 2 50 33     63 return 0 unless -d $child_path_full and -r _;
681              
682             # Main scan loop
683 2         9 local *FILELIST;
684 2         6 my ($dir, @files, @modules) = ();
685 2         8 my @queue = ( $child_path );
686 2         10 while ( $dir = pop @queue ) {
687 3         23 my $full_dir = File::Spec->catdir($inc_path, $dir);
688              
689             # Read in the raw file list
690             # Skip directories we can't open
691 3 50       6057 opendir( FILELIST, $full_dir ) or next;
692 3         82 @files = readdir FILELIST;
693 3         53 closedir FILELIST;
694              
695             # Iterate over them
696 5         58 @files = map { File::Spec->catfile($dir, $_) } # Full relative path
  11         37  
697 3         8 grep { ! /^\./ } @files; # Ignore hidden files
698 3         9 foreach my $file ( @files ) {
699 5         45 my $full_file = File::Spec->catfile($inc_path, $file);
700              
701             # Add to the queue if its a directory we can descend
702 5 100 66     107 if ( -d $full_file and -r _ ) {
703 1         3 push @queue, $file;
704 1         4 next;
705             }
706              
707             # We only want .pm files we can read
708 4 50       19 next unless substr( $file, length($file) - 3 ) eq '.pm';
709 4 50       15 next unless -f _;
710              
711 4         21 push @modules, $file;
712             }
713             }
714              
715             # Convert the file names into modules
716 4         51 map { join '::', File::Spec->splitdir($_) }
  4         12  
717 2         5 map { substr($_, 0, length($_) - 3) } @modules;
718             }
719              
720              
721              
722              
723              
724             #####################################################################
725             # Private support methods
726              
727             # Does a class or file exists somewhere in our include path. For
728             # convenience, returns the unresolved file name ( even if passed a class )
729             sub _file_exists ($) {
730 594     594   1395 _debug(\@_) if DEBUG;
731              
732             # What are we looking for?
733 594 50       1769 my $file = shift or return undef;
734 594 50       2453 return undef if $file =~ m/(?:\012|\015)/o;
735              
736             # If provided a class name, convert it
737 594 100       2301 $file = _class_file($file) if $file =~ /::/o;
738              
739             # Scan @INC for the file
740 594         1970 foreach ( @INC ) {
741 604 50       1929 next if ref $_ eq 'CODE';
742 604 100       28659 return $file if -f File::Spec->catfile($_, $file);
743             }
744              
745 1         41 undef;
746             }
747              
748             # Is a namespace occupied by anything significant
749             sub _namespace_occupied ($) {
750 1712     1712   3684 _debug(\@_) if DEBUG;
751              
752             # Handle the most likely case
753 1712 50       4883 my $class = shift or return undef;
754 1712 100       3191 return 1 if @{"${class}::ISA"};
  1712         10177  
755              
756             # Get the list of glob names, ignoring namespaces
757 1385         2825 foreach ( keys %{"${class}::"} ) {
  1385         5997  
758 1514 100       5439 next if substr($_, -2) eq '::';
759              
760             # Only check for methods, since that's all that's reliable
761 1512 100       2367 if (defined *{"${class}::$_"}{CODE}) {
  1512         8216  
762 181 50 66     799 if ($_ eq 'AUTOLOAD' and \&{"${class}::$_"} == \&_AUTOLOAD) {
  3         21  
763             # This is a Class::Autouse hook. Ignore.
764 0         0 next;
765             }
766 181         792 return 1;
767             }
768             }
769              
770 1204         4693 '';
771             }
772              
773             # For a given class, get the file name
774             sub _class_file ($) {
775 4281     4281   37883 join( '/', split /(?:\'|::)/, shift ) . '.pm';
776             }
777              
778             # Establish our call depth
779             sub _depth {
780 87     87   116 my $spaces = shift;
781 87         168 if ( DEBUG and ! $spaces ) {
782             _debug(\@_);
783             }
784              
785             # Search up the caller stack to find the first call that isn't us.
786 5         60 my $level = 0;
787 87         92 while( $level++ < 1000 ) {
788 96         225 my @call = caller($level);
789 541 100       2254 if ( @call ) {
790 538 100       1110 next if $call[3] eq '(eval)';
791 455 100       754 next if $call[3] =~ /^Class::Autouse::\w+\z/;
792             }
793              
794             # Subtract 1 for this sub's call
795 437         1968 $level -= 1;
796 87 100       98 return $spaces ? join( '', (' ') x ($level - 2)) : $level;
797             }
798              
799 84         2712 Carp::croak('Infinite loop trying to find call depth');
800             }
801              
802             # Die gracefully
803             sub _cry {
804 5     5   60 _debug() if DEBUG;
805 5         12 local $Carp::CarpLevel = $Carp::CarpLevel;
806 5         16 $Carp::CarpLevel += _depth();
807 5         23 $_[0] =~ s/\s+at\s+\S+Autouse\.pm line \d+\.$//;
808 5         1332 Carp::croak($_[0]);
809             }
810              
811             # Adaptive debug print generation
812             BEGIN {
813 13 50 100 13   3527 eval <<'END_DEBUG' if DEBUG;
  77 100   77   1012  
  77 100       168  
  77 100       278  
  76         1037  
  76         298  
  76         203  
  74         589  
  92         320  
  74         160  
  74         657  
  76         9192  
814              
815             sub _debug {
816             my $args = shift;
817             my $method = !! shift;
818             my $message = shift || '';
819             my @c = caller(1);
820             my $msg = _depth(1) . $c[3];
821             if ( ref $args ) {
822             my @mapped = map { defined $_ ? "'$_'" : 'undef' } @$args;
823             shift @mapped if $method;
824             $msg .= @mapped ? '( ' . ( join ', ', @mapped ) . ' )' : '()';
825             }
826             print "$msg$message\n";
827             }
828              
829             END_DEBUG
830             }
831              
832              
833              
834              
835              
836             #####################################################################
837             # Final Initialisation
838              
839             # The _UPDATE_HOOKS function is intended to turn our hijacking of UNIVERSAL::can
840             # on or off, depending on whether we have any live hooks. The idea being, if we
841             # don't have any live hooks, why bother intercepting UNIVERSAL::can calls?
842             sub _UPDATE_HOOKS () {
843 35     35   131 local $^W = 0;
844 35 100       191 *UNIVERSAL::can = $HOOKS ? \&_can : $ORIGINAL_CAN;
845 35 100       175 *UNIVERSAL::isa = $HOOKS ? \&_isa : $ORIGINAL_ISA;
846             }
847              
848             # The _GLOBAL_HOOKS function turns on the universal autoloader hooks
849             sub _GLOBAL_HOOKS () {
850 1158 100   1158   5925 return if \&UNIVERSAL::AUTOLOAD == \&_UNIVERSAL_AUTOLOAD;
851              
852             # Overwrite UNIVERSAL::AUTOLOAD and catch any
853             # UNIVERSAL::DESTROY calls so they don't trigger
854             # UNIVERSAL::AUTOLOAD. Anyone handling DESTROY calls
855             # via an AUTOLOAD should be summarily shot.
856 6         25 *UNIVERSAL::AUTOLOAD = \&_UNIVERSAL_AUTOLOAD;
857 6         13 *UNIVERSAL::DESTROY = \&_UNIVERSAL_DESTROY;
858              
859             # Because this will never go away, we increment $HOOKS such
860             # that it will never be decremented, and thus the
861             # UNIVERSAL::can/isa hijack will never be removed.
862 6 100       27 _UPDATE_HOOKS() unless $HOOKS++;
863             }
864              
865             BEGIN {
866             # Optional integration with prefork.pm (if installed)
867 13     13   46 local $@;
868 13         60 eval { require prefork };
  13         6213  
869 13 50       95 if ( $@ ) {
870             # prefork is not installed.
871             # Do manual detection of mod_perl
872 13 50       551 $DEVEL = 1 if $ENV{MOD_PERL};
873             } else {
874             # Go into devel mode when prefork is enabled
875 0         0 $LOADED{prefork} = 1;
876 0         0 local $@;
877 0         0 eval "prefork::notify( sub { Class::Autouse->devel(1) } )";
878 0 0       0 die $@ if $@;
879             }
880             }
881              
882             1;
883              
884             __END__