##
while (1) {
undef $!; # doesn't really undefine $!
$data = readline $fh; # or $fh->readline
if (!defined $data) {
last unless $!; # EOF
# handle readline error
}
# do something with $data
}
####
undef $!;
while ($data = <$fh>) {
# do something with $data
}
if (defined $!) {
# handle readline error
}