dump
LABEL
dump
This function causes an immediate core dump. Primarily this is so that you can use
undump
(1) to turn your core dump into an executable binary after having initialized all your variables at the beginning of the program. (The
undump
program is not supplied with the Perl distribution, and is not even possible on some architectures. There are hooks in the code for using the GNU
unexec()
routine as an alternative. Other methods may be supported in the future.) When the new binary is executed it will begin by executing a
goto LABEL
(with all the restrictions that
goto
suffers). Think of the operation as a
goto
with an intervening core dump and reincarnation. If
LABEL
is omitted, the function arranges for the program to restart from the top. Please note that any files opened at the time of the dump will not be open any more when the program is reincarnated, with possible confusion resulting on the part of Perl. See also the
-u
command-line switch. For example:
#!/usr/bin/perl use Getopt::Std; use MyHorridModule; %days = ( Sun => 1, Mon => 2, Tue => 3, Wed => 4, Thu => 5, Fri => 6, Sat => 7, ); dump QUICKSTART if $ARGV[0] eq '-d'; QUICKSTART: Getopts('f:'); ...
This startup code does some slow initialization code, and then calls the
dump
function to take a snapshot of the program's state. When the dumped version of the program is run, it bypasses all the startup code and goes directly to the
QUICKSTART
label. If the original script is invoked without the
-d
switch, it just falls through and runs normally.
If you're looking to use dump to speed up your program, check out the discussion of efficiency matters in Chapter 8, Other Oddments , as well the Perl native-code compiler in Chapter 6 . You might also consider autoloading, which at least makes it appear to run faster.