use Benchmark 'cmpthese'; $match=0; $string=""; cmpthese -5, { slower => <<'EOFCODE', for my $i (0..100) { $::string="${i}test"; if($::string =~ /(?:est|\d)/){ $::match++; } } EOFCODE slower2 => <<'EOFCODE', for my $i (0..100) { $::string="${i}test"; if($::string =~ /(?:\d|est)/){ $::match++; } } EOFCODE faster => <<'EOFCODE', for my $i (0..100) { $::string="${i}test"; if ($::string =~ /est/ || $::string =~ /\d/){ $::match++; } } EOFCODE faster2 => <<'EOFCODE', for my $i (0..100) { $::string="${i}test"; if ($::string =~ /\d/ || $::string =~ /est/){ $::match++; } } EOFCODE }; __END__ Benchmark: running faster, faster2, slower, slower2, each for at least 5 CPU seconds... faster: 5 wallclock secs ( 5.36 usr + 0.00 sys = 5.36 CPU) @ 3157.84/s (n=16926) faster2: 5 wallclock secs ( 5.39 usr + 0.00 sys = 5.39 CPU) @ 2859.21/s (n=15414) slower: 5 wallclock secs ( 5.44 usr + 0.00 sys = 5.44 CPU) @ 2673.59/s (n=14539) slower2: 6 wallclock secs ( 5.36 usr + 0.00 sys = 5.36 CPU) @ 2881.69/s (n=15443) Rate slower faster2 slower2 faster slower 2674/s -- -6% -7% -15% faster2 2859/s 7% -- -1% -9% slower2 2882/s 8% 1% -- -9% faster 3158/s 18% 10% 10% -- #### use Benchmark 'cmpthese'; $match=0; @strings=qw( abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz_est abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz_0 est_abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz 0_abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyzabcdefghijk_est_lmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyzabcdefghijk_0_lmnopqrstuvwxyz ); cmpthese -5, { slower => <<'EOFCODE', for my $str (@::strings) { if($::string =~ /(?:est|\d)/){ $::match++; } } EOFCODE slower2 => <<'EOFCODE', for my $str (@::strings) { if($::string =~ /(?:\d|est)/){ $::match++; } } EOFCODE faster => <<'EOFCODE', for my $str (@::strings) { if ($::string =~ /est/ || $::string =~ /\d/){ $::match++; } } EOFCODE faster2 => <<'EOFCODE', for my $str (@::strings) { if ($::string =~ /\d/ || $::string =~ /est/){ $::match++; } } EOFCODE }; __END__ #### Benchmark: running faster, faster2, slower, slower2, each for at least 5 CPU seconds... faster: 4 wallclock secs ( 5.25 usr + 0.00 sys = 5.25 CPU) @ 103837.90/s (n=545149) faster2: 6 wallclock secs ( 5.24 usr + 0.00 sys = 5.24 CPU) @ 103939.83/s (n=544125) slower: 5 wallclock secs ( 5.25 usr + 0.00 sys = 5.25 CPU) @ 133356.57/s (n=700122) slower2: 5 wallclock secs ( 5.28 usr + 0.00 sys = 5.28 CPU) @ 132805.94/s (n=701481) Rate faster faster2 slower2 slower faster 103838/s -- -0% -22% -22% faster2 103940/s 0% -- -22% -22% slower2 132806/s 28% 28% -- -0% slower 133357/s 28% 28% 0% --