$CHILD_ERROR
$?

最后一个管道关闭、反引号 (``) 命令、成功调用 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

助记符:类似于 shksh