summaryrefslogtreecommitdiffstats
path: root/upstream/archlinux/man3/AutoLoader.3perl
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-15 19:43:11 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-15 19:43:11 +0000
commitfc22b3d6507c6745911b9dfcc68f1e665ae13dbc (patch)
treece1e3bce06471410239a6f41282e328770aa404a /upstream/archlinux/man3/AutoLoader.3perl
parentInitial commit. (diff)
downloadmanpages-l10n-fc22b3d6507c6745911b9dfcc68f1e665ae13dbc.tar.xz
manpages-l10n-fc22b3d6507c6745911b9dfcc68f1e665ae13dbc.zip
Adding upstream version 4.22.0.upstream/4.22.0
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'upstream/archlinux/man3/AutoLoader.3perl')
-rw-r--r--upstream/archlinux/man3/AutoLoader.3perl303
1 files changed, 303 insertions, 0 deletions
diff --git a/upstream/archlinux/man3/AutoLoader.3perl b/upstream/archlinux/man3/AutoLoader.3perl
new file mode 100644
index 00000000..c8ce437f
--- /dev/null
+++ b/upstream/archlinux/man3/AutoLoader.3perl
@@ -0,0 +1,303 @@
+.\" -*- mode: troff; coding: utf-8 -*-
+.\" Automatically generated by Pod::Man 5.01 (Pod::Simple 3.43)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>.
+.ie n \{\
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds C`
+. ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{\
+. if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{\
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\" ========================================================================
+.\"
+.IX Title "AutoLoader 3perl"
+.TH AutoLoader 3perl 2024-02-11 "perl v5.38.2" "Perl Programmers Reference Guide"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH NAME
+AutoLoader \- load subroutines only on demand
+.SH SYNOPSIS
+.IX Header "SYNOPSIS"
+.Vb 2
+\& package Foo;
+\& use AutoLoader \*(AqAUTOLOAD\*(Aq; # import the default AUTOLOAD subroutine
+\&
+\& package Bar;
+\& use AutoLoader; # don\*(Aqt import AUTOLOAD, define our own
+\& sub AUTOLOAD {
+\& ...
+\& $AutoLoader::AUTOLOAD = "...";
+\& goto &AutoLoader::AUTOLOAD;
+\& }
+.Ve
+.SH DESCRIPTION
+.IX Header "DESCRIPTION"
+The \fBAutoLoader\fR module works with the \fBAutoSplit\fR module and the
+\&\f(CW\*(C`_\|_END_\|_\*(C'\fR token to defer the loading of some subroutines until they are
+used rather than loading them all at once.
+.PP
+To use \fBAutoLoader\fR, the author of a module has to place the
+definitions of subroutines to be autoloaded after an \f(CW\*(C`_\|_END_\|_\*(C'\fR token.
+(See perldata.) The \fBAutoSplit\fR module can then be run manually to
+extract the definitions into individual files \fIauto/funcname.al\fR.
+.PP
+\&\fBAutoLoader\fR implements an AUTOLOAD subroutine. When an undefined
+subroutine in is called in a client module of \fBAutoLoader\fR,
+\&\fBAutoLoader\fR's AUTOLOAD subroutine attempts to locate the subroutine in a
+file with a name related to the location of the file from which the
+client module was read. As an example, if \fIPOSIX.pm\fR is located in
+\&\fI/usr/local/lib/perl5/POSIX.pm\fR, \fBAutoLoader\fR will look for perl
+subroutines \fBPOSIX\fR in \fI/usr/local/lib/perl5/auto/POSIX/*.al\fR, where
+the \f(CW\*(C`.al\*(C'\fR file has the same name as the subroutine, sans package. If
+such a file exists, AUTOLOAD will read and evaluate it,
+thus (presumably) defining the needed subroutine. AUTOLOAD will then
+\&\f(CW\*(C`goto\*(C'\fR the newly defined subroutine.
+.PP
+Once this process completes for a given function, it is defined, so
+future calls to the subroutine will bypass the AUTOLOAD mechanism.
+.SS "Subroutine Stubs"
+.IX Subsection "Subroutine Stubs"
+In order for object method lookup and/or prototype checking to operate
+correctly even when methods have not yet been defined it is necessary to
+"forward declare" each subroutine (as in \f(CW\*(C`sub NAME;\*(C'\fR). See
+"SYNOPSIS" in perlsub. Such forward declaration creates "subroutine
+stubs", which are place holders with no code.
+.PP
+The AutoSplit and \fBAutoLoader\fR modules automate the creation of forward
+declarations. The AutoSplit module creates an 'index' file containing
+forward declarations of all the AutoSplit subroutines. When the
+AutoLoader module is 'use'd it loads these declarations into its callers
+package.
+.PP
+Because of this mechanism it is important that \fBAutoLoader\fR is always
+\&\f(CW\*(C`use\*(C'\fRd and not \f(CW\*(C`require\*(C'\fRd.
+.SS "Using \fBAutoLoader\fP's AUTOLOAD Subroutine"
+.IX Subsection "Using AutoLoader's AUTOLOAD Subroutine"
+In order to use \fBAutoLoader\fR's AUTOLOAD subroutine you \fImust\fR
+explicitly import it:
+.PP
+.Vb 1
+\& use AutoLoader \*(AqAUTOLOAD\*(Aq;
+.Ve
+.SS "Overriding \fBAutoLoader\fP's AUTOLOAD Subroutine"
+.IX Subsection "Overriding AutoLoader's AUTOLOAD Subroutine"
+Some modules, mainly extensions, provide their own AUTOLOAD subroutines.
+They typically need to check for some special cases (such as constants)
+and then fallback to \fBAutoLoader\fR's AUTOLOAD for the rest.
+.PP
+Such modules should \fInot\fR import \fBAutoLoader\fR's AUTOLOAD subroutine.
+Instead, they should define their own AUTOLOAD subroutines along these
+lines:
+.PP
+.Vb 2
+\& use AutoLoader;
+\& use Carp;
+\&
+\& sub AUTOLOAD {
+\& my $sub = $AUTOLOAD;
+\& (my $constname = $sub) =~ s/.*:://;
+\& my $val = constant($constname, @_ ? $_[0] : 0);
+\& if ($! != 0) {
+\& if ($! =~ /Invalid/ || $!{EINVAL}) {
+\& $AutoLoader::AUTOLOAD = $sub;
+\& goto &AutoLoader::AUTOLOAD;
+\& }
+\& else {
+\& croak "Your vendor has not defined constant $constname";
+\& }
+\& }
+\& *$sub = sub { $val }; # same as: eval "sub $sub { $val }";
+\& goto &$sub;
+\& }
+.Ve
+.PP
+If any module's own AUTOLOAD subroutine has no need to fallback to the
+AutoLoader's AUTOLOAD subroutine (because it doesn't have any AutoSplit
+subroutines), then that module should not use \fBAutoLoader\fR at all.
+.SS "Package Lexicals"
+.IX Subsection "Package Lexicals"
+Package lexicals declared with \f(CW\*(C`my\*(C'\fR in the main block of a package
+using \fBAutoLoader\fR will not be visible to auto-loaded subroutines, due to
+the fact that the given scope ends at the \f(CW\*(C`_\|_END_\|_\*(C'\fR marker. A module
+using such variables as package globals will not work properly under the
+\&\fBAutoLoader\fR.
+.PP
+The \f(CW\*(C`vars\*(C'\fR pragma (see "vars" in perlmod) may be used in such
+situations as an alternative to explicitly qualifying all globals with
+the package namespace. Variables pre-declared with this pragma will be
+visible to any autoloaded routines (but will not be invisible outside
+the package, unfortunately).
+.SS "Not Using AutoLoader"
+.IX Subsection "Not Using AutoLoader"
+You can stop using AutoLoader by simply
+.PP
+.Vb 1
+\& no AutoLoader;
+.Ve
+.SS "\fBAutoLoader\fP vs. \fBSelfLoader\fP"
+.IX Subsection "AutoLoader vs. SelfLoader"
+The \fBAutoLoader\fR is similar in purpose to \fBSelfLoader\fR: both delay the
+loading of subroutines.
+.PP
+\&\fBSelfLoader\fR uses the \f(CW\*(C`_\|_DATA_\|_\*(C'\fR marker rather than \f(CW\*(C`_\|_END_\|_\*(C'\fR.
+While this avoids the use of a hierarchy of disk files and the
+associated open/close for each routine loaded, \fBSelfLoader\fR suffers a
+startup speed disadvantage in the one-time parsing of the lines after
+\&\f(CW\*(C`_\|_DATA_\|_\*(C'\fR, after which routines are cached. \fBSelfLoader\fR can also
+handle multiple packages in a file.
+.PP
+\&\fBAutoLoader\fR only reads code as it is requested, and in many cases
+should be faster, but requires a mechanism like \fBAutoSplit\fR be used to
+create the individual files. ExtUtils::MakeMaker will invoke
+\&\fBAutoSplit\fR automatically if \fBAutoLoader\fR is used in a module source
+file.
+.SS "Forcing AutoLoader to Load a Function"
+.IX Subsection "Forcing AutoLoader to Load a Function"
+Sometimes, it can be necessary or useful to make sure that a certain
+function is fully loaded by AutoLoader. This is the case, for example,
+when you need to wrap a function to inject debugging code. It is also
+helpful to force early loading of code before forking to make use of
+copy-on-write as much as possible.
+.PP
+Starting with AutoLoader 5.73, you can call the
+\&\f(CW\*(C`AutoLoader::autoload_sub\*(C'\fR function with the fully-qualified name of
+the function to load from its \fI.al\fR file. The behaviour is exactly
+the same as if you called the function, triggering the regular
+\&\f(CW\*(C`AUTOLOAD\*(C'\fR mechanism, but it does not actually execute the
+autoloaded function.
+.SH CAVEATS
+.IX Header "CAVEATS"
+AutoLoaders prior to Perl 5.002 had a slightly different interface. Any
+old modules which use \fBAutoLoader\fR should be changed to the new calling
+style. Typically this just means changing a require to a use, adding
+the explicit \f(CW\*(AqAUTOLOAD\*(Aq\fR import if needed, and removing \fBAutoLoader\fR
+from \f(CW@ISA\fR.
+.PP
+On systems with restrictions on file name length, the file corresponding
+to a subroutine may have a shorter name that the routine itself. This
+can lead to conflicting file names. The \fIAutoSplit\fR package warns of
+these potential conflicts when used to split a module.
+.PP
+AutoLoader may fail to find the autosplit files (or even find the wrong
+ones) in cases where \f(CW@INC\fR contains relative paths, \fBand\fR the program
+does \f(CW\*(C`chdir\*(C'\fR.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+SelfLoader \- an autoloader that doesn't use external files.
+.SH AUTHOR
+.IX Header "AUTHOR"
+\&\f(CW\*(C`AutoLoader\*(C'\fR is maintained by the perl5\-porters. Please direct
+any questions to the canonical mailing list. Anything that
+is applicable to the CPAN release can be sent to its maintainer,
+though.
+.PP
+Author and Maintainer: The Perl5\-Porters <perl5\-porters@perl.org>
+.PP
+Maintainer of the CPAN release: Steffen Mueller <smueller@cpan.org>
+.SH "COPYRIGHT AND LICENSE"
+.IX Header "COPYRIGHT AND LICENSE"
+This package has been part of the perl core since the first release
+of perl5. It has been released separately to CPAN so older installations
+can benefit from bug fixes.
+.PP
+This package has the same copyright and license as the perl core:
+.PP
+.Vb 4
+\& Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+\& 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
+\& 2011, 2012, 2013
+\& by Larry Wall and others
+\&
+\& All rights reserved.
+\&
+\& This program is free software; you can redistribute it and/or modify
+\& it under the terms of either:
+\&
+\& a) the GNU General Public License as published by the Free
+\& Software Foundation; either version 1, or (at your option) any
+\& later version, or
+\&
+\& b) the "Artistic License" which comes with this Kit.
+\&
+\& This program is distributed in the hope that it will be useful,
+\& but WITHOUT ANY WARRANTY; without even the implied warranty of
+\& MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See either
+\& the GNU General Public License or the Artistic License for more details.
+\&
+\& You should have received a copy of the Artistic License with this
+\& Kit, in the file named "Artistic". If not, I\*(Aqll be glad to provide one.
+\&
+\& You should also have received a copy of the GNU General Public License
+\& along with this program in the file named "Copying". If not, write to the
+\& Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+\& MA 02110\-1301, USA or visit their web page on the internet at
+\& http://www.gnu.org/copyleft/gpl.html.
+\&
+\& For those of you that choose to use the GNU General Public License,
+\& my interpretation of the GNU General Public License is that no Perl
+\& script falls under the terms of the GPL unless you explicitly put
+\& said script under the terms of the GPL yourself. Furthermore, any
+\& object code linked with perl does not automatically fall under the
+\& terms of the GPL, provided such object code only adds definitions
+\& of subroutines and variables, and does not otherwise impair the
+\& resulting interpreter from executing any standard Perl script. I
+\& consider linking in C subroutines in this manner to be the moral
+\& equivalent of defining subroutines in the Perl language itself. You
+\& may sell such an object file as proprietary provided that you provide
+\& or offer to provide the Perl source, as specified by the GNU General
+\& Public License. (This is merely an alternate way of specifying input
+\& to the program.) You may also sell a binary produced by the dumping of
+\& a running Perl script that belongs to you, provided that you provide or
+\& offer to provide the Perl source as specified by the GPL. (The
+\& fact that a Perl interpreter and your code are in the same binary file
+\& is, in this case, a form of mere aggregation.) This is my interpretation
+\& of the GPL. If you still have concerns or difficulties understanding
+\& my intent, feel free to contact me. Of course, the Artistic License
+\& spells all this out for your protection, so you may prefer to use that.
+.Ve