I have constructed the following test case to compare the performance of simple regular expression and simple eq test:
use Benchmark;
@switch_me = qw / bob frnak 1 roger james /;
timethese (1000000, {
'test_regex' => ' &test_regex; ',
'test_eq' => ' &test_eq; '
});
sub test_regex()
{
for(@switch_me) {
/bob/ && do { break };
/frnak/ && do { break };
$_ == 1 && do { break };
}
}
sub test_eq()
{
for(@switch_me) {
$_ eq "bob" && do { break };
$_ eq "frnak" && do { break };
$_ == 1 && do { break };
}
}
The two subroutines are identical except for the string testing bit. The following are the test results:
Benchmark: timing 1000000 iterations of test_eq, test_regex...
test_eq: 8 wallclock secs ( 8.45 usr + 0.01 sys = 8.46 CPU)
@ 118161.41/s (n=1000000)
test_regex: 10 wallclock secs ( 9.22 usr + 0.01 sys = 9.23 CPU)
@ 108307.16/s (n=1000000)
It's about (118161.41-108307.16)/108307.16 = 10% speed increase in using eq than using regular expression. It's not a great increase, but it's nevertheless faster to use eq than regular expression. |