wait
call.
To get the actual exit value divide by 256. See also exec. This is NOT what you want to use to capture the output from a command, for that you
should use merely back-ticks or qx//, as described in `STRING`.
Because system
and back-ticks block
SIGINT and
SIGQUIT, killing the program they're running doesn't actually interrupt your program.
@args = ("command", "arg1", "arg2"); system(@args) == 0 or die "system @args failed: $?"
Here's a more elaborate example of analysing the return value from system
on a
UNIX system to check for all possibilities, including for signals and coredumps.
$rc = 0xffff & system @args; printf "system(%s) returned %#04x: ", "@args", $rc; if ($rc == 0) { print "ran with normal exit\n"; } elsif ($rc == 0xff00) { print "command failed: $!\n"; } elsif ($rc > 0x80) { $rc >>= 8; print "ran with non-zero exit status $rc\n"; } else { print "ran with "; if ($rc & 0x80) { $rc &= ~0x80; print "coredump from "; } print "signal $rc\n" } $ok = ($rc != 0);