You want to replace the running program with another, as when checking parameters and setting up the initial environment before running another program.
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";
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 be automatically run as they would if your process actually exited.
The
exec
in
Chapter 3
of
Programming Perl
and in
perlfunc
(1); your system's
execlp
(2) manpage (if you have it);
Recipe 16.2