449498c3673f15f137d72ed767e473f21ca523a6
[perl.git] / lib / AutoLoader.pm
1 package AutoLoader;
2 use Carp;
3
4 =head1 NAME
5
6 AutoLoader - load functions only on demand
7
8 =head1 SYNOPSIS
9
10     package FOOBAR;
11     use Exporter;
12     use AutoLoader;
13     @ISA = (Exporter, AutoLoader);
14
15 =head1 DESCRIPTION
16
17 This module tells its users that functions in the FOOBAR package are to be
18 autoloaded from F<auto/$AUTOLOAD.al>.  See L<perlsub/"Autoloading">.
19
20 =cut
21
22 AUTOLOAD {
23     my $name = "auto/$AUTOLOAD.al";
24     $name =~ s#::#/#g;
25     eval {require $name};
26     if ($@) {
27         # The load might just have failed because the filename was too
28         # long for some old SVR3 systems which treat long names as errors.
29         # If we can succesfully truncate a long name then it's worth a go.
30         # There is a slight risk that we could pick up the wrong file here
31         # but autosplit should have warned about that when splitting.
32         if ($name =~ s/(\w{12,})\.al$/substr($1,0,11).".al"/e){
33             eval {require $name};
34         }
35         elsif ($AUTOLOAD =~ /::DESTROY$/) {
36             eval "sub $AUTOLOAD {}";
37         }
38         if ($@){
39             $@ =~ s/ at .*\n//;
40             croak $@;
41         }
42     }
43     goto &$AUTOLOAD;
44 }
45                             
46 sub import
47 {
48  my ($callclass, $callfile, $callline,$path,$callpack) = caller(0);
49  ($callpack = $callclass) =~ s#::#/#;
50  if (defined($path = $INC{$callpack . '.pm'}))
51   {
52    if ($path =~ s#^(.*)$callpack\.pm$#$1auto/$callpack/autosplit.ix# && -e $path) 
53     {
54      eval {require $path}; 
55      carp $@ if ($@);  
56     } 
57    else 
58     {
59      croak "Have not loaded $callpack.pm";
60     }
61   }
62 }
63
64 1;