I didn't know that! Is the logic behind replacing the sub with a string expression, to fool the cache?
use Benchmark 'cmpthese';
cmpthese(-2, {
predecl => '
my $y;
my $x;
for $x (1..10000) { $y+=$x }
',
lexical => '
my $y;
for my $x (1..10000) { $y+=$x }
',
});
__END__
Rate lexical predecl
lexical 3996/s -- -0%
predecl 4001/s 0% --
vs
use Benchmark 'cmpthese';
cmpthese(-2, {
predecl => sub {
my $y;
my $x;
for $x (1..10000) { $y+=$x }
},
lexical => sub {
my $y;
for my $x (1..10000) { $y+=$x }
},
});
Rate predecl lexical
predecl 4011/s -- -0%
lexical 4015/s 0% --
Which is more or less what haukex and choroba demonstrated.