Replacing the Current Program with a Different One
Problem
You want to replace the running program with another, as when checking parameters and setting up the initial environment before running another program.
Solution
Use the built-in
exec
function. If exec
is called with a single argument
containing metacharacters, the shell will be used to run the program:
exec("archive *.data") or die "Couldn't replace myself with archive: $!\n";
If you pass exec
more than one argument, the shell
will not be used:
exec("archive", "accounting.data") or die "Couldn't replace myself with archive: $!\n";
If called with a single argument containing no shell metacharacters,
the argument will be split on whitespace and then interpreted as
though the resulting list had been passed to exec
:
exec("archive accounting.data") or die "Couldn't replace myself with archive: $!\n";
Discussion
The exec
function in Perl is a direct interface to
the execlp
(2) system call, which replaces the
current program with another, leaving the process intact. The program
that calls exec
gets wiped clean, and its place in
the operating system’s process table is taken by the program
specified in the arguments to exec
. As a result,
the new program has the same process ID ($$
) as
the original program. If the specified program couldn’t be run,
exec
returns a false value and the original
program continues. Be sure to check for this.
If you exec
yourself into a different program, neither your END blocks nor any object destructors will ...
Get Perl Cookbook 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.