Autoloading
If you invoke a function called
Test::func()
, for example, and if
func()
has not been defined in module Test, Perl
automatically looks for a subroutine called
Test::AUTOLOAD()
. If such a subroutine exists, Perl
calls it with the arguments that were passed to
func()
. In addition, a variable called
$AUTOLOAD
is set to the full name of the function
that was called (”Test::func
“). Objective-C
programmers will recognize this as being similar to the
“:forward” declaration, in which an object uses this
statement to trap all procedure calls it doesn’t handle, in
order to forward it to a “delegate.”
The AUTOLOAD
subroutine can do just about anything
it wants. For example, it can do one of the following:
Handle the call itself. The caller of Test::func does not know that
AUTOLOAD
really handled the call.Automatically create a subroutine on the fly (using
eval
) to do the right thing, and then call that new subroutine. In fact, instead of calling that subroutine, you can simply go to it, like this:sub AUTOLOAD { ... create subroutine ... goto &$AUTOLOAD; # jump to it }
This is a special form of
goto
that erases the stack-frame of theAUTOLOAD
routine so thatTest::func
will not know it has been being called fromAUTOLOAD
.Dynamically load an object file (or a DLL in Microsoft Windows), using the standard Dynaloader module, and then execute the appropriate call. This is one of the more popular uses of
AUTOLOAD
.Use the
system
function to launch another program by the same name.
Get Advanced Perl Programming now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.