eof FILEHANDLE
eof ()
eof

如果 FILEHANDLE 的下一次讀取會傳回檔案結尾 FILEHANDLE 未開啟,則傳回 1。FILEHANDLE 可能是一個表達式,其值提供真正的檔案代號。(請注意,此函數實際上會讀取一個字元,然後再 ungetc,因此在互動式環境中並無用處。)在達到檔案結尾後,請勿從終端機檔案讀取 (或對其呼叫 eof(FILEHANDLE))。如果您這樣做,終端機等檔案類型可能會遺失檔案結尾條件。

沒有參數的 eof 會使用最後讀取的檔案。使用帶有空括號的 eof() 則不同。它指的是由命令列上列出的檔案所形成的偽檔案,並透過 <> 算子存取。由於 <> 沒有像一般檔案句柄那樣明確開啟,因此在使用 <> 之前,eof() 會檢查 @ARGV 以判斷是否有可用的輸入。同樣地,在 <> 傳回檔案結束後,eof() 會假設您正在處理另一個 @ARGV 清單,如果您尚未設定 @ARGV,它會從 STDIN 讀取輸入;請參閱 perlop 中的「I/O 算子」

while (<>) 迴圈中,eofeof(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
}

實用提示:您幾乎不需要在 Perl 中使用 eof,因為輸入算子通常會在資料用盡或遇到錯誤時傳回 undef