$OS_ERROR
$ERRNO
$!

當被參照時,$! 會擷取 C errno 整數變數的當前值。如果 $! 被指定為一個數字值,該值會儲存在 errno 中。當被參照為字串時,$! 會產生對應於 errno 的系統錯誤字串。

許多系統或函式庫呼叫會在失敗時設定 errno,以指出失敗的原因。它們通常不會在成功時將 errno 設定為零,並可能在成功時將 errno 設定為非零值。這表示 errno,因此 $!,僅在失敗立即才有意義

if (open my $fh, "<", $filename) {
    # Here $! is meaningless.
    ...
}
else {
    # ONLY here is $! meaningful.
    ...
    # Already here $! might be meaningless.
}
# Since here we might have either success or failure,
# $! is meaningless.

在此,無意義表示 $! 可能與 open() 運算子的結果無關。對 $! 的指定也同樣是暫時的。它可以在呼叫 die() 運算子之前立即使用,以設定結束值,或檢查對應於錯誤 n 的系統錯誤字串,或將 $! 還原為有意義的狀態。

即使沒有執行系統呼叫,Perl 本身也可能在失敗時將 errno 設定為非零值。

助記符:剛剛發生什麼爆炸?