最后一个管道关闭、反引号 (``) 命令、成功调用 wait() 或 waitpid(),或 system() 运算符返回的状态。这仅仅是传统 Unix wait() 系统调用返回的 16 位状态字(或者被伪造成看起来像它)。因此,子进程的退出值实际上是 ($? >> 8),而 $? & 127 给出进程因何信号(如果有)而终止,$? & 128 报告是否有核心转储。
此外,如果 C 中支持 h_errno 变量,则如果任何 gethost*() 函数失败,其值将通过 $? 返回。
如果您为 SIGCHLD 安装了信号处理程序,则 $? 的值通常在该处理程序之外是错误的。
在 END 子例程中,$? 包含将传递给 exit() 的值。您可以在 END 子例程中修改 $? 以更改程序的退出状态。例如
END {
$? = 1 if $? == 255; # die would make it 255
}
在 VMS 下,pragma `use vmsish 'status'` 使 `$?` 反映实际的 VMS 退出状态,而不是默认的 POSIX 状态模拟;有关详细信息,请参阅 "$?" in perlvms。
助记符:类似于 sh 和 ksh。