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 .