perl 11157166.pl tempfile.txt is size 29 Mb 0.133742 read lines from disk and do RE (2047 matches). 0.079146 read lines from in-memory file and do RE (2047 matches). #### tempfile.txt is size 29 Mb 0.057704 read lines from disk and do RE (2047 matches). 0.805546 read lines from in-memory file and do RE (2047 matches). #### #!/usr/bin/env perl use warnings; use strict; use Time::HiRes qw( time ); my $file = shift @ARGV; my ($fh, $time); if (!$file) { # should use Path::Tiny::tempfile $file = 'tempfile.txt'; open my $ofh, '>', $file or die "Cannot open $file for writing, $!"; srand(1234567); for my $i (0..200000) { my $string = 'some random text ' . rand(); $string = $string x int (rand() * 10); if (rand() < 0.01) { $string = " Query${string}"; } say {$ofh} $string; } $ofh->close or die "Cannot close $file, $!"; printf "%s is size %i Mb\n", $file, (-s $file) / (1028**2); } open $fh, "<", $file; $time = time; my $match_count1; while(<$fh>) { /^ ?Query/ && $match_count1++; } printf "%f read lines from disk and do RE ($match_count1 matches).\n", time - $time; seek $fh, 0, 0; my $s = ""; while(<$fh>) { $s .= $_; } open $fh, "<", \$s; $time = time; my $match_count2; while(<$fh>) { /^ ?Query/ && $match_count2++;; } printf "%f read lines from in-memory file and do RE ($match_count2 matches).\n", time - $time;