exec
function executes a system command AND NEVER RETURNS, unless the command does not exist and is executed directly instead of via /bin/sh -c
(see below). Use system
instead of exec
if you
want it to return.
If there is more than one argument in
LIST, or if
LIST is an array with more than one value, calls execvp
with the arguments in
LIST. If there is only one scalar argument, the argument is checked for shell metacharacters. If there are any, the entire argument is passed to
/bin/sh -c
for parsing. If there are none, the argument is split into words and passed
directly to execvp,
which is more efficient. Note:
exec
and system
do not flush your output buffer,
so you may need to set $|
to avoid lost output. Examples:
exec '/bin/echo', 'Your arguments are: ', @ARGV; exec "sort $outfile | uniq";
If you don't really want to execute the first argument, but want to lie to the program you are executing about its own name, you can specify the program you actually want to run as an ``indirect object'' (without a comma) in front of the LIST. (This always forces interpretation of the LIST as a multi-valued list, even if there is only a single scalar in the list.) Example:
$shell = '/bin/csh'; exec $shell '-sh'; # pretend it's a login shell
or, more directly,
exec {'/bin/csh'} '-sh'; # pretend it's a login shell