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
AUTOLOADreally 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
gotothat erases the stack-frame of theAUTOLOADroutine so thatTest::funcwill 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
systemfunction to launch another program by the same name.
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access