use strict; use warnings; my $file_name = 'G:\\I386\\DRIVER.CAB'; # 50MB file. open(my $fh, '<', $file_name) or die("Unable to open file \"$file_name\": $!\n"); # Read 100 bytes at a time. #binmode($fh); #$/ = \100; my $line; undef $!; $line = <$fh>; my $ok_defined = defined($!); my $ok_str_val = "$!"; my $ok_num_val = 0+$!; print("Eject the media then press Enter."); ; undef $!; for (;;) { undef $!; last if not defined ($line = <$fh>); warn(length($line), "\n"); } my $bad_defined = defined($!); my $bad_str_val = "$!"; my $bad_num_val = 0+$!; close($fh) or warn("Unable to read file \"$file_name\": $!\n"); print("On success, "); if ($ok_defined) { print("\$! = \"$ok_str_val\"/$ok_num_val\n"); } else { print("\$! is not defined\n"); } print("On failure, "); if ($bad_defined) { print("\$! = \"$bad_str_val\"/$bad_num_val\n"); } else { print("\$! is not defined\n"); }