# from a program use AutoSplit; autosplit_modules(@ARGV) # or from the command line perl -MAutoSplit -e 'autosplit(
FILE, DIR, KEEP, CHECK, MODTIME
)' ... # another interface perl -MAutoSplit -e 'autosplit_lib_modules(@ARGV)' ...
This function splits up your program or module into files that the AutoLoader module can handle. It is mainly used to build autoloading Perl library modules, especially complex ones like POSIX. It is used by both the standard Perl libraries and by the MakeMaker module to automatically configure libraries for autoloading.
The
autosplit()
interface splits the specified
FILE
into a hierarchy rooted at the directory
DIR
. It creates directories as needed to reflect class hierarchy. It then creates the file
autosplit.ix
, which acts as both a forward declaration for all package routines and also as a timestamp for when the hierarchy was last updated.
The remaining three arguments to
autosplit()
govern other options to the autosplitter. If the third argument,
KEEP
, is false, then any pre-existing
.al
files in the autoload directory are removed if they are no longer part of the module (obsoleted functions). The fourth argument,
CHECK
, instructs
autosplit()
to check the module currently being split to ensure that it really does include a
use
specification for the AutoLoader module, and skips the module if AutoLoader is not detected. Lastly, the
MODTIME
argument specifies that
autosplit()
is to check the modification time of the module against that of the
autosplit.ix
file, and only split the module if it is newer.
Here's a typical use of AutoSplit by the MakeMaker utility via the command line:
perl -MAutoSplit -e 'autosplit($ARGV[0], $ARGV[1], 0, 1, 1)'
MakeMaker defines this as a
make
macro, and it is invoked with file and directory arguments. The
autosplit()
function splits the named file into the given directory and deletes obsolete
.al
files, after checking first that the module does use the AutoLoader and ensuring that the module isn't already split in its current form.
The
autosplit_lib_modules()
form is used in the building of Perl. It takes as input a list of files (modules) that are assumed to reside in a directory
lib/
relative to the current directory. Each file is sent to the autosplitter one at a time, to be split into the directory
lib/auto/
.
In both usages of the autosplitter, only subroutines defined following the Perl special marker
__END__
are split out into separate files. Routines placed prior to this marker are not autosplit, but are forced to load when the module is first required.
Currently, AutoSplit cannot handle multiple package specifications within one file.
AutoSplit will inform the user if it is necessary to create the top-level directory specified in the invocation. It's better if the script or installation process that invokes AutoSplit has created the full directory path ahead of time. This warning may indicate that the module is being split into an incorrect path.
AutoSplit will also warn the user of subroutines whose names cause potential naming conflicts on machines with severely limited (eight characters or less) filename length. Since the subroutine name is used as the filename, these warnings can aid in portability to such systems.
Warnings are issued and the file skipped if AutoSplit cannot locate either the
__END__
marker or a specification of the form
package Name;
. AutoSplit will also complain if it can't create directories or files.
7.2.2 AutoLoader - Load Functions Only on Demand | 7.2.4 Benchmark - Check and Compare Running Times of Code |