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;