#!/bin/bash echo generate perl -wE 'for (1..10000000) { print int(rand 2) ? "xyzabcd" : ("mul(" . int(rand 5000). "," . int(rand 5000) . ")" ) ; print "\n" unless int rand 10 }' > 1 echo python cat < }; my $count = () = $input =~ m/mul\(\d{1,3},\d{1,3}\)/g; print "Found $count matches.\n"; EOF echo perl line by line cat <<'EOF' | (time perl - 1) my $fn = shift; exit 1 if not defined $fn; my $count = 0; open my $fh, "<", $fn or die "open failed"; while (<$fh>) { ++$count while /mul\(\d{1,3},\d{1,3}\)/g; } print "Found $count matches.\n"; EOF echo perl tybalt cat <<'EOF' | (time perl - 1) my $fn = shift; exit 1 if not defined $fn; my $input = do { open my $fh, "<", $fn or die "open failed"; local $/; <$fh> }; my $count = 0; ++$count while $input =~ /mul\(\d{1,3},\d{1,3}\)/g; print "Found $count matches.\n"; EOF rm 1 #### python Found 200013 matches. real 0m0.515s user 0m0.475s sys 0m0.040s perl orig Found 200013 matches. real 0m0.725s user 0m0.681s sys 0m0.044s perl line by line Found 200013 matches. real 0m0.906s user 0m0.874s sys 0m0.032s perl tybalt Found 200013 matches. real 0m0.611s user 0m0.583s sys 0m0.028s