#! perl -slw
use strict;
use Benchmark qw[ cmpthese ];
use List::Util qw[ shuffle ];
our @terms = qw[
the quick brown fox jumps over the lazy dog
];
our $re = join'', map "(?=^.*$_)", @terms;
$re = qr/$re/;
our @lines = map join( ' ', shuffle @terms), 1 .. 100;
push @lines, ( 'every good boy deserves food' ) x 100;
our( $a, $b ) = (0) x 2;
cmpthese -1, {
a=>q[ /$re/ and ++$a for @lines; ],
b=>q[ for my $str ( @lines ) { !grep( $str !~ /$_/, @terms) and ++
+$b; } ],
};
print "$a:$b";
__END__
C:\test>junk48
Rate b a
b 81.5/s -- -94%
a 1399/s 1616% --
208200:12000
Or, if I don't pre-compile the regex, 30x faster: #! perl -slw
use strict;
use Benchmark qw[ cmpthese ];
use List::Util qw[ shuffle ];
our @terms = qw[
the quick brown fox jumps over the lazy dog
];
our $re = join'', map "(?=^.*$_)", @terms;
#$re = qr/$re/;
our @lines = map join( ' ', shuffle @terms), 1 .. 100;
push @lines, ( 'every good boy deserves food' ) x 100;
our( $a, $b ) = (0) x 2;
cmpthese -1, {
a=>q[ /$re/ && ++$a for @lines; ],
b=>q[ for my $str ( @lines ) { !grep( $str !~ /$_/, @terms) && ++$
+b; } ],
};
print "$a:$b";
__END__
C:\test>junk48
Rate b a
b 82.7/s -- -97%
a 2632/s 3082% --
389700:12000
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
|