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, $_ }; } sub sub3 { my $fh; open $fh, 'vsfull.csv'; my @lines = <$fh>; } sub sub4 { my $fh; open $fh,'vsfull.csv';my @lines = readline($fh); } #Hmark:: use Benchmark 'cmpthese'; cmpthese( -3, { readbig => \&sub1, whilelp => \&sub2, better => \&sub3, butter => \&sub4, }); __END__ Benchmark: running better, butter, readbig, whilelp, each for at least 3 CPU seconds... better: 3 wallclock secs ( 2.20 usr + 1.02 sys = 3.22 CPU) @ 372.36/s (n=1199) butter: 3 wallclock secs ( 2.17 usr + 1.04 sys = 3.21 CPU) @ 373.52/s (n=1199) readbig: 3 wallclock secs ( 3.01 usr + 0.12 sys = 3.13 CPU) @ 52.72/s (n=165) whilelp: 3 wallclock secs ( 2.17 usr + 1.02 sys = 3.19 CPU) @ 272.10/s (n=868) Rate readbig whilelp better butter readbig 52.7/s -- -81% -86% -86% whilelp 272/s 416% -- -27% -27% better 372/s 606% 37% -- -0% butter 374/s 609% 37% 0% --