o - pretend to optimize your code, but actually introduce bugs
####
#!/usr/bin/env perl
use strict;
use warnings;
use Benchmark 'cmpthese';
my $str = 'xyz';
my $re = qr{^xyz$};
cmpthese 0 => {
use_m => \&use_m,
as_qr => \&as_qr,
use_o => \&use_o,
raw_m => \&raw_m,
raw_o => \&raw_o,
};
sub use_m {
$str =~ m/$re/ and return;
}
sub as_qr {
$str =~ $re and return;
}
sub use_o {
$str =~ m/$re/o and return;
}
sub raw_m {
$str =~ m/^xyz$/ and return;
}
sub raw_o {
$str =~ m/^xyz$/o and return;
}
####
Rate as_qr use_m use_o raw_m raw_o
as_qr 2729934/s -- -0% -71% -73% -73%
use_m 2734042/s 0% -- -71% -73% -73%
use_o 9454792/s 246% 246% -- -6% -7%
raw_m 10094766/s 270% 269% 7% -- -1%
raw_o 10207253/s 274% 273% 8% 1% --