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