Benchmark: running BigRE, Index, OptRE, m// loop, each for at least 10 CPU seconds... BigRE: 11 wallclock secs (10.56 usr + 0.00 sys = 10.56 CPU) @ 11690.90/s (n=123491) Index: 11 wallclock secs (10.61 usr + 0.00 sys = 10.61 CPU) @ 43921.29/s (n=465961) OptRE: 11 wallclock secs (10.59 usr + 0.00 sys = 10.59 CPU) @ 17239.59/s (n=182619) m// loop: 11 wallclock secs (10.50 usr + 0.00 sys = 10.50 CPU) @ 6825.71/s (n=71670) #### Benchmark: running BigRE, Index, OptRE, m// loop, each for at least 10 CPU seconds... BigRE: 11 wallclock secs (10.39 usr + 0.00 sys = 10.39 CPU) @ 12548.26/s (n=130389) Index: 10 wallclock secs (10.53 usr + 0.00 sys = 10.53 CPU) @ 56956.89/s (n=599813) OptRE: 11 wallclock secs (10.53 usr + 0.00 sys = 10.53 CPU) @ 17720.63/s (n=186616) m// loop: 11 wallclock secs (10.48 usr + 0.00 sys = 10.48 CPU) @ 7873.90/s (n=82550) #### Benchmark: running BigRE, Index, OptRE, m// loop, each for at least 10 CPU seconds... BigRE: 10 wallclock secs (10.59 usr + 0.00 sys = 10.59 CPU) @ 77.59/s (n=822) Index: 11 wallclock secs (10.50 usr + 0.00 sys = 10.50 CPU) @ 1427.58/s (n=14991) m// loop: 11 wallclock secs (10.47 usr + 0.00 sys = 10.47 CPU) @ 686.50/s (n=7187) #### Benchmark: running BigRE, Index, OptRE, m// loop, each for at least 10 CPU seconds... BigRE: 10 wallclock secs (10.63 usr + 0.00 sys = 10.63 CPU) @ 2025.69/s (n=21523) Index: 11 wallclock secs (10.47 usr + 0.00 sys = 10.47 CPU) @ 19019.11/s (n=199092) OptRE: 11 wallclock secs (10.51 usr + 0.00 sys = 10.51 CPU) @ 2702.33/s (n=28415) m// loop: 11 wallclock secs (10.45 usr + 0.00 sys = 10.45 CPU) @ 9593.84/s (n=100294) #### use strict; use warnings; use Benchmark; my @matchlist = qw( this that these those some other too); my $string = 'here we have a typical sentance which has a match near the othr end'; my $bigregex = join '|', map quotemeta($_), @matchlist; my $byhandre = 'th(is|at|ese|ose)|some|other|too'; timethese(shift, { 'Index', 'SimpleIndex', 'm// loop', 'Match', 'BigRE', 'BigRE', 'OptRE', 'ByHand', } ); sub SimpleIndex { for (@matchlist) { return 1 if(index($string, $_) != $[-1 ); } 0; } sub Match { for (@matchlist) { return 1 if( $string =~ /$_/io ); } 0; } sub BigRE { return 1 if( $string =~ /$bigregex/io ); 0; } sub ByHand { return 1 if( $string =~ /$byhandre/io ); 0; }