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.
Inside an END
subroutine $?
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".