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 the AUTOLOAD routine so that Test::func will not know it has been being called from AUTOLOAD.

  • 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.