最後一個 pipe 關閉、反引號 (``
) 命令、成功呼叫 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 中,實用程式 use vmsish 'status'
會讓 $?
反映實際的 VMS 退出狀態,而不是預設的 POSIX 狀態模擬;請參閱 "$?" in perlvms 以取得詳細資訊。
助記符:類似於 sh 和 ksh。