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