如果 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
}