eof FILEHANDLE
eof()
eof
This function returns true if the next read on FILEHANDLE
will return
end of file, or if FILEHANDLE
is not open.
FILEHANDLE
may be an expression whose value gives the real filehandle
name.
An eof without an argument returns the end-of-file
status for the last file read.
Empty parentheses ()
may be used in connection with the
combined files listed on the command line. That is, inside a
while (<>)
loop eof()
will detect the
end of only the last of a group of files.
Use eof(ARGV)
or eof
(without the parentheses) to test
each file in a while (<>)
loop. For example, the
following code inserts dashes just before the last line of
the last
file:
while (<>) { if (eof()) { print "-" x 30, "\n"; } print; }
On the other hand, this script resets line numbering on each input file:
while (<>) { print "$.\t$_"; if (eof) { # Not eof(). close ARGV; # reset $. } }
Like "$
" in a sed program, eof tends to show up in
line number ranges. Here's a script that prints lines from
/pattern/
to end of each input file:
while (<>) { print if /pattern/ .. eof; }
Here, the flip-flop operator (..
) evaluates the regular expression
match for each line. Until the pattern matches, the operator returns
false. When it finally matches, the operator starts returning true,
causing the lines to be printed. When the eof operator finally
returns true (at the end of the file being examined), the flip-flop
operator resets, and starts returning false again.
Note that the eof function actually reads a byte and then pushes it back on the input stream with ungetc(3), so it is not very useful in an interactive context. In fact, experienced Perl programmers rarely use eof, since the various input operators already behave quite nicely in while-loop conditionals. See the example in the description of foreach in Chapter 2.