As the documentation of eof also points out, you almost never need to call eof()
in Perl.
In most cases operations that read from file-handles will return undef
when they reach the end of the file or when they reach the end of the data available.
Reading text file in while loop
<$fh>
, the "readline" operator in Perl returns undef
when there is no more to read from the file-handle:
open my $fh, '<', 'data.txt' or die;
while (my $line = <$fh>) {
}
The same is true for the diamond operator, which is just a special case of the "readline" operator:
while (<>) {
}
Reading file in list context
open my $fh, '<', 'data.txt' or die;
my @lines = <$fh>;
In this case even checking for undef
is unnecessary as Perl will just end the operation when the
input is exhausted.
Reading binary file
Even when reading binary files using read
we don't need to check for end of file manually
as read
will return 0 at the end of file. So we can write:
open my $fh, '<:raw', $file or die;
my $buf;
while (read $fh, $buf, 1000) {
}