s/iter original late_chomp rand_seek original 4.83 -- -9% -100% late_chomp 4.39 10% -- -100% rand_seek 1.20e-03 402667% 365992% -- #### # assumes a global "$n" and "$file" sub rand_seek { my $size = $n || 3; # sample size my (@sample, @seen, $line, $pos_after); my $filesize = -s $file; open(my $fh, $file) or die; while (@sample < $size) { seek($fh,int(rand($filesize)),0); <$fh>; # skip this fragment of a line $line = <$fh>; # get the next line $pos_after = tell($fh); next if grep { $pos_after == $_ } @seen; chomp $line; push @sample, $line if $line; push @seen, $pos_after; } close $fh }