use strict;
use Carp;
use Scalar::Util qw(readonly);
sub ro {
print "readonly($_[0])=".readonly($_[0])."\n";
$_[0] = 'xxx';
}
eval { ro('lonely') } or print $@;
eval { ro(named => 4); } or print $@;
eval { ro(-named => 7); } or print $@;
for (1..5) { # to test whether changing $_[0] affects the literal
eval { ro(-loop => 7); } or print $@;
}
####
V:\>perl -MO=Deparse -e "%a = (-foo => 1);"
(%a) = (-'foo', 1);
-e syntax OK
####
use strict;
use Benchmark;
sub woH {
my %a = (
-a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1,
-a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1,
-a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1,
-a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1,
-a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1, -a => 1,
);
return;
}
sub wH {
my %a = (
'-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1,
'-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1,
'-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1,
'-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1,
'-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1, '-a' => 1,
);
return;
}
timethese 100000, {
woH => \&woH,
wH => \&wH,
}
__END__
Benchmark: timing 100000 iterations of wH, woH...
wH: 1 wallclock secs ( 1.45 usr + 0.00 sys = 1.45 CPU) @ 68917.99/s (n=100000)
woH: 3 wallclock secs ( 2.39 usr + 0.00 sys = 2.39 CPU) @ 41893.59/s (n=100000)
Benchmark: timing 100000 iterations of wH, woH...
wH: 2 wallclock secs ( 1.47 usr + 0.01 sys = 1.48 CPU) @ 67521.94/s (n=100000)
woH: 2 wallclock secs ( 2.32 usr + 0.02 sys = 2.34 CPU) @ 42735.04/s (n=100000)
Benchmark: timing 100000 iterations of wH, woH...
wH: 1 wallclock secs ( 1.42 usr + 0.00 sys = 1.42 CPU) @ 70472.16/s (n=100000)
woH: 3 wallclock secs ( 2.56 usr + 0.00 sys = 2.56 CPU) @ 39077.76/s (n=100000)
####
D:\>perl -MO=Deparse -e "print -'ahoj' => 1"
print '-ahoj', 1;
-e syntax OK
D:\>perl -MO=Deparse -e "print -ahoj => 1"
print -'ahoj', 1;
-e syntax OK