use Benchmark; sub sub1 { my $fh; open $fh, 'vsfull.csv'; binmode $fh; my @lines; my $block; my $left = ''; while( read $fh, $block, 8192 ){ $block = $left . $block; my $i = index $block, "\n"; while($i > 0){ push @lines, substr($block,0,$i); substr($block,0,$i+1,''); $i = index $block, "\n"; } $left = $block; } } sub sub2 { my $fh; my @lines; open $fh, 'vsfull.csv'; while(<$fh>){ push @lines, $_ }; } timethese( 100, { readbig => \&sub1, whilelp => \&sub2 }); #### Benchmark: timing 100 iterations of readbig, whilelp... readbig: 25 wallclock secs (25.21 usr + 0.00 sys = 25.21 CPU) @ 3.97/s (n=100) whilelp: 157 wallclock secs (156.71 usr + 0.00 sys = 156.71 CPU) @ 0.64/s (n=100)