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% --