This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Explain the \p{} and \P{} error message better and
[perl5.git] / lib / AutoLoader.pm
CommitLineData
8990e307 1package AutoLoader;
21c92a1d 2
17f410f9
GS
3use 5.005_64;
4our(@EXPORT, @EXPORT_OK, $VERSION);
f06db76b 5
adaafad2 6my $is_dosish;
ed79a026 7my $is_epoc;
adaafad2 8my $is_vms;
084592ab 9my $is_macos;
adaafad2 10
1be0b951
CS
11BEGIN {
12 require Exporter;
e3d0cac0
IZ
13 @EXPORT = @EXPORT = ();
14 @EXPORT_OK = @EXPORT_OK = qw(AUTOLOAD);
adaafad2 15 $is_dosish = $^O eq 'dos' || $^O eq 'os2' || $^O eq 'MSWin32';
ed79a026 16 $is_epoc = $^O eq 'epoc';
adaafad2 17 $is_vms = $^O eq 'VMS';
084592ab
CN
18 $is_macos = $^O eq 'MacOS';
19 $VERSION = '5.58';
1be0b951 20}
f06db76b 21
8990e307 22AUTOLOAD {
7d4fbd98
GS
23 my $sub = $AUTOLOAD;
24 my $filename;
5a556d17
NIS
25 # Braces used to preserve $1 et al.
26 {
adaafad2
GS
27 # Try to find the autoloaded file from the package-qualified
28 # name of the sub. e.g., if the sub needed is
29 # Getopt::Long::GetOptions(), then $INC{Getopt/Long.pm} is
30 # something like '/usr/lib/perl5/Getopt/Long.pm', and the
31 # autoload file is '/usr/lib/perl5/auto/Getopt/Long/GetOptions.al'.
32 #
33 # However, if @INC is a relative path, this might not work. If,
34 # for example, @INC = ('lib'), then $INC{Getopt/Long.pm} is
35 # 'lib/Getopt/Long.pm', and we want to require
36 # 'auto/Getopt/Long/GetOptions.al' (without the leading 'lib').
37 # In this case, we simple prepend the 'auto/' and let the
38 # C<require> take care of the searching for us.
39
7d4fbd98 40 my ($pkg,$func) = ($sub =~ /(.*)::([^:]+)$/);
adaafad2 41 $pkg =~ s#::#/#g;
7d4fbd98 42 if (defined($filename = $INC{"$pkg.pm"})) {
084592ab
CN
43 if ($is_macos) {
44 $pkg =~ tr#/#:#;
45 $filename =~ s#^(.*)$pkg\.pm\z#$1auto:$pkg:$func.al#s;
46 } else {
47 $filename =~ s#^(.*)$pkg\.pm\z#$1auto/$pkg/$func.al#s;
48 }
adaafad2
GS
49
50 # if the file exists, then make sure that it is a
51 # a fully anchored path (i.e either '/usr/lib/auto/foo/bar.al',
52 # or './lib/auto/foo/bar.al'. This avoids C<require> searching
53 # (and failing) to find the 'lib/auto/foo/bar.al' because it
54 # looked for 'lib/lib/auto/foo/bar.al', given @INC = ('lib').
55
7d4fbd98 56 if (-r $filename) {
14a089c5 57 unless ($filename =~ m|^/|s) {
adaafad2 58 if ($is_dosish) {
14a089c5 59 unless ($filename =~ m{^([a-z]:)?[\\/]}is) {
7d4fbd98 60 $filename = "./$filename";
adaafad2
GS
61 }
62 }
ed79a026
OF
63 elsif ($is_epoc) {
64 unless ($filename =~ m{^([a-z?]:)?[\\/]}is) {
65 $filename = "./$filename";
66 }
67 }elsif ($is_vms) {
7d4fbd98
GS
68 # XXX todo by VMSmiths
69 $filename = "./$filename";
adaafad2 70 }
084592ab 71 elsif (!$is_macos) {
7d4fbd98 72 $filename = "./$filename";
adaafad2
GS
73 }
74 }
75 }
76 else {
7d4fbd98 77 $filename = undef;
adaafad2
GS
78 }
79 }
7d4fbd98 80 unless (defined $filename) {
adaafad2 81 # let C<require> do the searching
7d4fbd98
GS
82 $filename = "auto/$sub.al";
83 $filename =~ s#::#/#g;
adaafad2 84 }
5a556d17 85 }
e14baed2 86 my $save = $@;
7d4fbd98 87 eval { local $SIG{__DIE__}; require $filename };
8990e307 88 if ($@) {
7d4fbd98
GS
89 if (substr($sub,-9) eq '::DESTROY') {
90 *$sub = sub {};
e14baed2 91 } else {
92 # The load might just have failed because the filename was too
93 # long for some old SVR3 systems which treat long names as errors.
94 # If we can succesfully truncate a long name then it's worth a go.
95 # There is a slight risk that we could pick up the wrong file here
96 # but autosplit should have warned about that when splitting.
7d4fbd98
GS
97 if ($filename =~ s/(\w{12,})\.al$/substr($1,0,11).".al"/e){
98 eval { local $SIG{__DIE__}; require $filename };
e14baed2 99 }
100 if ($@){
101 $@ =~ s/ at .*\n//;
fb73857a 102 my $error = $@;
103 require Carp;
104 Carp::croak($error);
e14baed2 105 }
a0d0e21e 106 }
8990e307 107 }
e14baed2 108 $@ = $save;
7d4fbd98 109 goto &$sub;
8990e307 110}
1be0b951 111
c2960299 112sub import {
1be0b951
CS
113 my $pkg = shift;
114 my $callpkg = caller;
115
116 #
117 # Export symbols, but not by accident of inheritance.
118 #
119
e3d0cac0
IZ
120 if ($pkg eq 'AutoLoader') {
121 local $Exporter::ExportLevel = 1;
122 Exporter::import $pkg, @_;
123 }
1be0b951
CS
124
125 #
c2960299
AD
126 # Try to find the autosplit index file. Eg., if the call package
127 # is POSIX, then $INC{POSIX.pm} is something like
128 # '/usr/local/lib/perl5/POSIX.pm', and the autosplit index file is in
129 # '/usr/local/lib/perl5/auto/POSIX/autosplit.ix', so we require that.
130 #
131 # However, if @INC is a relative path, this might not work. If,
132 # for example, @INC = ('lib'), then
133 # $INC{POSIX.pm} is 'lib/POSIX.pm', and we want to require
134 # 'auto/POSIX/autosplit.ix' (without the leading 'lib').
135 #
1be0b951 136
1c1c7f20 137 (my $calldir = $callpkg) =~ s#::#/#g;
1be0b951
CS
138 my $path = $INC{$calldir . '.pm'};
139 if (defined($path)) {
c2960299 140 # Try absolute path name.
1be0b951 141 $path =~ s#^(.*)$calldir\.pm$#$1auto/$calldir/autosplit.ix#;
c2960299
AD
142 eval { require $path; };
143 # If that failed, try relative path with normal @INC searching.
144 if ($@) {
1be0b951 145 $path ="auto/$calldir/autosplit.ix";
c2960299
AD
146 eval { require $path; };
147 }
fb73857a 148 if ($@) {
149 my $error = $@;
150 require Carp;
151 Carp::carp($error);
152 }
f06db76b 153 }
f06db76b 154}
8990e307 155
cb0cff20
JH
156sub unimport {
157 my $callpkg = caller;
158 eval "package $callpkg; sub AUTOLOAD;";
159}
160
8990e307 1611;
1be0b951
CS
162
163__END__
164
165=head1 NAME
166
167AutoLoader - load subroutines only on demand
168
169=head1 SYNOPSIS
170
171 package Foo;
172 use AutoLoader 'AUTOLOAD'; # import the default AUTOLOAD subroutine
173
174 package Bar;
175 use AutoLoader; # don't import AUTOLOAD, define our own
176 sub AUTOLOAD {
177 ...
178 $AutoLoader::AUTOLOAD = "...";
179 goto &AutoLoader::AUTOLOAD;
180 }
181
182=head1 DESCRIPTION
183
184The B<AutoLoader> module works with the B<AutoSplit> module and the
185C<__END__> token to defer the loading of some subroutines until they are
186used rather than loading them all at once.
187
188To use B<AutoLoader>, the author of a module has to place the
189definitions of subroutines to be autoloaded after an C<__END__> token.
190(See L<perldata>.) The B<AutoSplit> module can then be run manually to
191extract the definitions into individual files F<auto/funcname.al>.
192
193B<AutoLoader> implements an AUTOLOAD subroutine. When an undefined
194subroutine in is called in a client module of B<AutoLoader>,
195B<AutoLoader>'s AUTOLOAD subroutine attempts to locate the subroutine in a
196file with a name related to the location of the file from which the
197client module was read. As an example, if F<POSIX.pm> is located in
198F</usr/local/lib/perl5/POSIX.pm>, B<AutoLoader> will look for perl
199subroutines B<POSIX> in F</usr/local/lib/perl5/auto/POSIX/*.al>, where
200the C<.al> file has the same name as the subroutine, sans package. If
201such a file exists, AUTOLOAD will read and evaluate it,
202thus (presumably) defining the needed subroutine. AUTOLOAD will then
203C<goto> the newly defined subroutine.
204
f610777f 205Once this process completes for a given function, it is defined, so
1be0b951
CS
206future calls to the subroutine will bypass the AUTOLOAD mechanism.
207
208=head2 Subroutine Stubs
209
210In order for object method lookup and/or prototype checking to operate
211correctly even when methods have not yet been defined it is necessary to
212"forward declare" each subroutine (as in C<sub NAME;>). See
213L<perlsub/"SYNOPSIS">. Such forward declaration creates "subroutine
214stubs", which are place holders with no code.
215
216The AutoSplit and B<AutoLoader> modules automate the creation of forward
217declarations. The AutoSplit module creates an 'index' file containing
218forward declarations of all the AutoSplit subroutines. When the
219AutoLoader module is 'use'd it loads these declarations into its callers
220package.
221
222Because of this mechanism it is important that B<AutoLoader> is always
223C<use>d and not C<require>d.
224
225=head2 Using B<AutoLoader>'s AUTOLOAD Subroutine
226
227In order to use B<AutoLoader>'s AUTOLOAD subroutine you I<must>
228explicitly import it:
229
230 use AutoLoader 'AUTOLOAD';
231
232=head2 Overriding B<AutoLoader>'s AUTOLOAD Subroutine
233
234Some modules, mainly extensions, provide their own AUTOLOAD subroutines.
235They typically need to check for some special cases (such as constants)
236and then fallback to B<AutoLoader>'s AUTOLOAD for the rest.
237
238Such modules should I<not> import B<AutoLoader>'s AUTOLOAD subroutine.
239Instead, they should define their own AUTOLOAD subroutines along these
240lines:
241
242 use AutoLoader;
fb73857a 243 use Carp;
1be0b951
CS
244
245 sub AUTOLOAD {
7d4fbd98
GS
246 my $sub = $AUTOLOAD;
247 (my $constname = $sub) =~ s/.*:://;
1be0b951
CS
248 my $val = constant($constname, @_ ? $_[0] : 0);
249 if ($! != 0) {
265f5c4a 250 if ($! =~ /Invalid/ || $!{EINVAL}) {
7d4fbd98 251 $AutoLoader::AUTOLOAD = $sub;
1be0b951
CS
252 goto &AutoLoader::AUTOLOAD;
253 }
254 else {
255 croak "Your vendor has not defined constant $constname";
256 }
257 }
7d4fbd98
GS
258 *$sub = sub { $val }; # same as: eval "sub $sub { $val }";
259 goto &$sub;
1be0b951
CS
260 }
261
262If any module's own AUTOLOAD subroutine has no need to fallback to the
263AutoLoader's AUTOLOAD subroutine (because it doesn't have any AutoSplit
264subroutines), then that module should not use B<AutoLoader> at all.
265
266=head2 Package Lexicals
267
268Package lexicals declared with C<my> in the main block of a package
269using B<AutoLoader> will not be visible to auto-loaded subroutines, due to
270the fact that the given scope ends at the C<__END__> marker. A module
271using such variables as package globals will not work properly under the
272B<AutoLoader>.
273
274The C<vars> pragma (see L<perlmod/"vars">) may be used in such
275situations as an alternative to explicitly qualifying all globals with
276the package namespace. Variables pre-declared with this pragma will be
277visible to any autoloaded routines (but will not be invisible outside
278the package, unfortunately).
279
cb0cff20
JH
280=head2 Not Using AutoLoader
281
282You can stop using AutoLoader by simply
283
284 no AutoLoader;
285
1be0b951
CS
286=head2 B<AutoLoader> vs. B<SelfLoader>
287
288The B<AutoLoader> is similar in purpose to B<SelfLoader>: both delay the
289loading of subroutines.
290
291B<SelfLoader> uses the C<__DATA__> marker rather than C<__END__>.
292While this avoids the use of a hierarchy of disk files and the
293associated open/close for each routine loaded, B<SelfLoader> suffers a
294startup speed disadvantage in the one-time parsing of the lines after
295C<__DATA__>, after which routines are cached. B<SelfLoader> can also
296handle multiple packages in a file.
297
298B<AutoLoader> only reads code as it is requested, and in many cases
f610777f 299should be faster, but requires a mechanism like B<AutoSplit> be used to
1be0b951
CS
300create the individual files. L<ExtUtils::MakeMaker> will invoke
301B<AutoSplit> automatically if B<AutoLoader> is used in a module source
302file.
303
304=head1 CAVEATS
305
306AutoLoaders prior to Perl 5.002 had a slightly different interface. Any
307old modules which use B<AutoLoader> should be changed to the new calling
308style. Typically this just means changing a require to a use, adding
309the explicit C<'AUTOLOAD'> import if needed, and removing B<AutoLoader>
310from C<@ISA>.
311
312On systems with restrictions on file name length, the file corresponding
313to a subroutine may have a shorter name that the routine itself. This
314can lead to conflicting file names. The I<AutoSplit> package warns of
315these potential conflicts when used to split a module.
316
adaafad2
GS
317AutoLoader may fail to find the autosplit files (or even find the wrong
318ones) in cases where C<@INC> contains relative paths, B<and> the program
319does C<chdir>.
320
1be0b951
CS
321=head1 SEE ALSO
322
323L<SelfLoader> - an autoloader that doesn't use external files.
324
325=cut