關閉與檔案處理相關的檔案或管線,清除 IO 緩衝區,並關閉系統檔案描述符。如果這些操作成功且沒有任何 PerlIO 層報告錯誤,則傳回 true。如果省略引數,則關閉目前選取的檔案處理。
如果您要立即對 FILEHANDLE 執行另一個 open
,則不必關閉 FILEHANDLE,因為 open
會為您關閉它。(請參閱 open
。)不過,對輸入檔案執行明確的 close
會重設行數計數器 ($.
),而 open
執行的隱式關閉則不會。
如果檔案處理來自管線開啟,則如果涉及的其他系統呼叫之一失敗,或其程式以非零狀態結束,close
會傳回 false。如果唯一的問題是程式以非零狀態結束,$!
會設為 0
。關閉管線也會等待在管線上執行的處理結束,以防您之後想要查看管線的輸出,並會將該命令的結束狀態值隱式放入 $?
和 ${^CHILD_ERROR_NATIVE}
中。
如果有多個執行緒在執行,則如果檔案處理在另一個執行緒中仍為開啟狀態,close
會對來自管線開啟的檔案處理傳回 true,而不會等待子處理結束。
在對另一端寫入處理的處理結束寫入之前關閉管線的讀取端,會導致寫入端收到 SIGPIPE。如果另一端無法處理,請務必在關閉管線之前讀取所有資料。
範例
open(OUTPUT, '|sort >foo') # pipe to sort
or die "Can't start sort: $!";
#... # print stuff to output
close OUTPUT # wait for sort to finish
or warn $! ? "Error closing sort pipe: $!"
: "Exit status $? from sort";
open(INPUT, 'foo') # get sort's results
or die "Can't open 'foo' for input: $!";
FILEHANDLE 可能是一個其值可用作間接檔案代號的表達式,通常是實際檔案代號名稱或自動變數代號。