3 use vars qw(@EXPORT @EXPORT_OK);
11 @EXPORT_OK = qw(AUTOLOAD);
12 $is_dosish = $^O eq 'dos' || $^O eq 'os2' || $^O eq 'MSWin32';
13 $is_vms = $^O eq 'VMS';
18 # Braces used to preserve $1 et al.
20 # Try to find the autoloaded file from the package-qualified
21 # name of the sub. e.g., if the sub needed is
22 # Getopt::Long::GetOptions(), then $INC{Getopt/Long.pm} is
23 # something like '/usr/lib/perl5/Getopt/Long.pm', and the
24 # autoload file is '/usr/lib/perl5/auto/Getopt/Long/GetOptions.al'.
26 # However, if @INC is a relative path, this might not work. If,
27 # for example, @INC = ('lib'), then $INC{Getopt/Long.pm} is
28 # 'lib/Getopt/Long.pm', and we want to require
29 # 'auto/Getopt/Long/GetOptions.al' (without the leading 'lib').
30 # In this case, we simple prepend the 'auto/' and let the
31 # C<require> take care of the searching for us.
33 my ($pkg,$func) = $AUTOLOAD =~ /(.*)::([^:]+)$/;
35 if (defined($name=$INC{"$pkg.pm"})) {
36 $name =~ s#^(.*)$pkg\.pm$#$1auto/$pkg/$func.al#;
38 # if the file exists, then make sure that it is a
39 # a fully anchored path (i.e either '/usr/lib/auto/foo/bar.al',
40 # or './lib/auto/foo/bar.al'. This avoids C<require> searching
41 # (and failing) to find the 'lib/auto/foo/bar.al' because it
42 # looked for 'lib/lib/auto/foo/bar.al', given @INC = ('lib').
45 unless ($name =~ m|^/|) {
47 unless ($name =~ m{^([a-z]:)?[\\/]}i) {
52 # XXX todo by VMSmiths
64 unless (defined $name) {
65 # let C<require> do the searching
66 $name = "auto/$AUTOLOAD.al";
71 eval { local $SIG{__DIE__}; require $name };
73 if (substr($AUTOLOAD,-9) eq '::DESTROY') {
76 # The load might just have failed because the filename was too
77 # long for some old SVR3 systems which treat long names as errors.
78 # If we can succesfully truncate a long name then it's worth a go.
79 # There is a slight risk that we could pick up the wrong file here
80 # but autosplit should have warned about that when splitting.
81 if ($name =~ s/(\w{12,})\.al$/substr($1,0,11).".al"/e){
82 eval {local $SIG{__DIE__};require $name};
101 # Export symbols, but not by accident of inheritance.
104 Exporter::export $pkg, $callpkg, @_ if $pkg eq 'AutoLoader';
107 # Try to find the autosplit index file. Eg., if the call package
108 # is POSIX, then $INC{POSIX.pm} is something like
109 # '/usr/local/lib/perl5/POSIX.pm', and the autosplit index file is in
110 # '/usr/local/lib/perl5/auto/POSIX/autosplit.ix', so we require that.
112 # However, if @INC is a relative path, this might not work. If,
113 # for example, @INC = ('lib'), then
114 # $INC{POSIX.pm} is 'lib/POSIX.pm', and we want to require
115 # 'auto/POSIX/autosplit.ix' (without the leading 'lib').
118 (my $calldir = $callpkg) =~ s#::#/#g;
119 my $path = $INC{$calldir . '.pm'};
120 if (defined($path)) {
121 # Try absolute path name.
122 $path =~ s#^(.*)$calldir\.pm$#$1auto/$calldir/autosplit.ix#;
123 eval { require $path; };
124 # If that failed, try relative path with normal @INC searching.
126 $path ="auto/$calldir/autosplit.ix";
127 eval { require $path; };
143 AutoLoader - load subroutines only on demand
148 use AutoLoader 'AUTOLOAD'; # import the default AUTOLOAD subroutine
151 use AutoLoader; # don't import AUTOLOAD, define our own
154 $AutoLoader::AUTOLOAD = "...";
155 goto &AutoLoader::AUTOLOAD;
160 The B<AutoLoader> module works with the B<AutoSplit> module and the
161 C<__END__> token to defer the loading of some subroutines until they are
162 used rather than loading them all at once.
164 To use B<AutoLoader>, the author of a module has to place the
165 definitions of subroutines to be autoloaded after an C<__END__> token.
166 (See L<perldata>.) The B<AutoSplit> module can then be run manually to
167 extract the definitions into individual files F<auto/funcname.al>.
169 B<AutoLoader> implements an AUTOLOAD subroutine. When an undefined
170 subroutine in is called in a client module of B<AutoLoader>,
171 B<AutoLoader>'s AUTOLOAD subroutine attempts to locate the subroutine in a
172 file with a name related to the location of the file from which the
173 client module was read. As an example, if F<POSIX.pm> is located in
174 F</usr/local/lib/perl5/POSIX.pm>, B<AutoLoader> will look for perl
175 subroutines B<POSIX> in F</usr/local/lib/perl5/auto/POSIX/*.al>, where
176 the C<.al> file has the same name as the subroutine, sans package. If
177 such a file exists, AUTOLOAD will read and evaluate it,
178 thus (presumably) defining the needed subroutine. AUTOLOAD will then
179 C<goto> the newly defined subroutine.
181 Once this process completes for a given funtion, it is defined, so
182 future calls to the subroutine will bypass the AUTOLOAD mechanism.
184 =head2 Subroutine Stubs
186 In order for object method lookup and/or prototype checking to operate
187 correctly even when methods have not yet been defined it is necessary to
188 "forward declare" each subroutine (as in C<sub NAME;>). See
189 L<perlsub/"SYNOPSIS">. Such forward declaration creates "subroutine
190 stubs", which are place holders with no code.
192 The AutoSplit and B<AutoLoader> modules automate the creation of forward
193 declarations. The AutoSplit module creates an 'index' file containing
194 forward declarations of all the AutoSplit subroutines. When the
195 AutoLoader module is 'use'd it loads these declarations into its callers
198 Because of this mechanism it is important that B<AutoLoader> is always
199 C<use>d and not C<require>d.
201 =head2 Using B<AutoLoader>'s AUTOLOAD Subroutine
203 In order to use B<AutoLoader>'s AUTOLOAD subroutine you I<must>
204 explicitly import it:
206 use AutoLoader 'AUTOLOAD';
208 =head2 Overriding B<AutoLoader>'s AUTOLOAD Subroutine
210 Some modules, mainly extensions, provide their own AUTOLOAD subroutines.
211 They typically need to check for some special cases (such as constants)
212 and then fallback to B<AutoLoader>'s AUTOLOAD for the rest.
214 Such modules should I<not> import B<AutoLoader>'s AUTOLOAD subroutine.
215 Instead, they should define their own AUTOLOAD subroutines along these
223 ($constname = $AUTOLOAD) =~ s/.*:://;
224 my $val = constant($constname, @_ ? $_[0] : 0);
226 if ($! =~ /Invalid/) {
227 $AutoLoader::AUTOLOAD = $AUTOLOAD;
228 goto &AutoLoader::AUTOLOAD;
231 croak "Your vendor has not defined constant $constname";
234 *$AUTOLOAD = sub { $val }; # same as: eval "sub $AUTOLOAD { $val }";
238 If any module's own AUTOLOAD subroutine has no need to fallback to the
239 AutoLoader's AUTOLOAD subroutine (because it doesn't have any AutoSplit
240 subroutines), then that module should not use B<AutoLoader> at all.
242 =head2 Package Lexicals
244 Package lexicals declared with C<my> in the main block of a package
245 using B<AutoLoader> will not be visible to auto-loaded subroutines, due to
246 the fact that the given scope ends at the C<__END__> marker. A module
247 using such variables as package globals will not work properly under the
250 The C<vars> pragma (see L<perlmod/"vars">) may be used in such
251 situations as an alternative to explicitly qualifying all globals with
252 the package namespace. Variables pre-declared with this pragma will be
253 visible to any autoloaded routines (but will not be invisible outside
254 the package, unfortunately).
256 =head2 B<AutoLoader> vs. B<SelfLoader>
258 The B<AutoLoader> is similar in purpose to B<SelfLoader>: both delay the
259 loading of subroutines.
261 B<SelfLoader> uses the C<__DATA__> marker rather than C<__END__>.
262 While this avoids the use of a hierarchy of disk files and the
263 associated open/close for each routine loaded, B<SelfLoader> suffers a
264 startup speed disadvantage in the one-time parsing of the lines after
265 C<__DATA__>, after which routines are cached. B<SelfLoader> can also
266 handle multiple packages in a file.
268 B<AutoLoader> only reads code as it is requested, and in many cases
269 should be faster, but requires a machanism like B<AutoSplit> be used to
270 create the individual files. L<ExtUtils::MakeMaker> will invoke
271 B<AutoSplit> automatically if B<AutoLoader> is used in a module source
276 AutoLoaders prior to Perl 5.002 had a slightly different interface. Any
277 old modules which use B<AutoLoader> should be changed to the new calling
278 style. Typically this just means changing a require to a use, adding
279 the explicit C<'AUTOLOAD'> import if needed, and removing B<AutoLoader>
282 On systems with restrictions on file name length, the file corresponding
283 to a subroutine may have a shorter name that the routine itself. This
284 can lead to conflicting file names. The I<AutoSplit> package warns of
285 these potential conflicts when used to split a module.
287 AutoLoader may fail to find the autosplit files (or even find the wrong
288 ones) in cases where C<@INC> contains relative paths, B<and> the program
293 L<SelfLoader> - an autoloader that doesn't use external files.