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