for (;;) { undef $!; unless (defined( $line = <> )) { die $! if $!; last; # reached EOF } # ... } #### #!/usr/bin/perl sub doit { open FH, shift or die "open failure: $!\n"; $! = shift; 1 while ; $n = $!+0; print "n=$n s=$!\n"; } doit $0, 5; doit $0, 6; doit $0, undef; #### n=5 s=I/O error n=6 s=No such device or address n=0 s=