The status returned by the last pipe close, backtick (
``) command, or system() operator. Note that this is the status word returned by the wait() system call (or else is made up to look like it). Thus, the exit value of the subprocess is actually (
$? >> 8), and
$? & 127 gives which signal, if any, the process died from, and
$? & 128 reports whether there was a core dump. (Mnemonic: similar to sh and ksh.)
Additionally, if the
h_errno variable is supported in C, its value is returned via $? if any of the
gethost*() functions fail.
Note that if you have installed a signal handler for
SIGCHLD, the value of
$? will usually be wrong outside that handler.
$? contains the value that is going to be given to
exit(). You can modify
$? in an
END subroutine to change the exit status of the script.
Under VMS, the pragma
use vmsish 'status' makes
$? reflect the actual VMS exit status, instead of the default emulation of POSIX status.
Also see "Error Indicators".