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
.