如果 FILEHANDLE 的下一次讀取會傳回檔案結尾或 FILEHANDLE 未開啟,則傳回 1。FILEHANDLE 可能是一個表達式,其值提供真正的檔案代號。(請注意,此函數實際上會讀取一個字元,然後再 ungetc
,因此在互動式環境中並無用處。)在達到檔案結尾後,請勿從終端機檔案讀取 (或對其呼叫 eof(FILEHANDLE)
)。如果您這樣做,終端機等檔案類型可能會遺失檔案結尾條件。
沒有參數的 eof
會使用最後讀取的檔案。使用帶有空括號的 eof()
則不同。它指的是由命令列上列出的檔案所形成的偽檔案,並透過 <>
算子存取。由於 <>
沒有像一般檔案句柄那樣明確開啟,因此在使用 <>
之前,eof()
會檢查 @ARGV
以判斷是否有可用的輸入。同樣地,在 <>
傳回檔案結束後,eof()
會假設您正在處理另一個 @ARGV
清單,如果您尚未設定 @ARGV
,它會從 STDIN
讀取輸入;請參閱 perlop 中的「I/O 算子」。
在 while (<>)
迴圈中,eof
或 eof(ARGV)
可用於偵測每個檔案的結尾,而 eof()
則只會偵測最後一個檔案的結尾。範例
# reset line numbering on each input file
while (<>) {
next if /^\s*#/; # skip comments
print "$.\t$_";
} continue {
close ARGV if eof; # Not eof()!
}
# insert dashes just before last line of last file
while (<>) {
if (eof()) { # check for end of last file
print "--------------\n";
}
print;
last if eof(); # needed if we're reading from a terminal
}