Some time ago I wrote about preparing regexpes earlier for cases where you can not use /o modifier. For example you have:
my $re = qr{\d+};
And often you need to match:
$str =~ /^$re$/;
You can not use /o modifier if $re may change. In the blog post I've described precompiling and showed that it works as fast as regexp with /o modifier:
my $re = qr{...}; my $re_prepared = /^$re$/; $str =~ $re_prepared;
Guess my surprize when I executed the same script with perl 5.14.1. Any method is at least 2 times faster than prepared, even ... =~ /^$re$/!
Results for 5.8.9:
$ perl5.8.9 dynamic_regexp_with_o_effect.pl Rate no_o o no_o_pre no_o_pre_braces static no_o 1581903/s -- -10% -25% -32% -50% o 1764430/s 12% -- -16% -24% -44% no_o_pre 2104366/s 33% 19% -- -9% -34% no_o_pre_braces 2323549/s 47% 32% 10% -- -27% static 3174754/s 101% 80% 51% 37% --
Results for 5.10.0 and newer:
$ perl5.10.0 dynamic_regexp_with_o_effect.pl Rate no_o_pre no_o_pre_braces no_o o static no_o_pre 873813/s -- -0% -52% -68% -75% no_o_pre_braces 877714/s 0% -- -52% -68% -75% no_o 1816840/s 108% 107% -- -34% -49% o 2759410/s 216% 214% 52% -- -22% static 3542486/s 305% 304% 95% 28% --
No comments:
Post a Comment