當被參照時,$!
會擷取 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
設定為非零值。
助記符:剛剛發生什麼爆炸?