cmpthese -3,{a=>q[@a = map $_*1, @a],b=>q[map $_*=1, @a],c=>q[$_*=1 for @a] };;
####
timethese (10000000,{a=>q{map {1} @a},b=>q[map $_*=1, @a],c=>q[$_*=1 for @a] });
####
#! perl -slw
use strict;
use Benchmark qw[ cmpthese ];
our @a = 1 .. 1e6;
cmpthese -1, {
a => q[ @a = map $_* 1, @a ],
b => q[ map $_*= 1, @a ],
c => q[ $_*= 1 for @a ],
};
__END__
C:\test>BuksBench.pl
Rate a c b
a 3.46/s -- -68% -68%
c 10.7/s 208% -- -2%
b 10.8/s 213% 2% --
####
timethese 10000, {
"idiomatic" => sub { my @array = 1..1000; $_ +=2 for @array; },
"map" => sub { my @array = 1..1000; map{ $_ +=2;} @array; },
};
__END__
C:\test>IdiotsBench.pl
Benchmark: timing 10000 iterations of idiomatic, map...
idiomatic: 2 wallclock secs ( 1.52 usr + 0.00 sys = 1.52 CPU) @ 6596.31/s (n=10000)
map: 3 wallclock secs ( 3.06 usr + 0.00 sys = 3.06 CPU) @ 3264.77/s (n=10000)
####
C:\test>IdiotsBench.pl
my @array = 1..1000;
timethese 10000, {
"idiomatic" => sub { $_ +=2 for @array; },
"map" => sub { map{ $_ +=2 } @array; },
};
__END__
C:\test>IdiotsBench.pl
Benchmark: timing 10000 iterations of idiomatic, map...
idiomatic: 1 wallclock secs ( 0.92 usr + 0.00 sys = 0.92 CPU) @ 10845.99/s (n=10000)
map: 2 wallclock secs ( 2.44 usr + 0.00 sys = 2.44 CPU) @ 4101.72/s (n=10000)
####
C:\test>IdiotsBench.pl
timethese 10000, {
"idiomatic" => sub { $_ +=2 for @array; },
"map" => sub { map $_ +=2, @array; },
};
__END__
Benchmark: timing 10000 iterations of idiomatic, map...
idiomatic: 1 wallclock secs ( 0.95 usr + 0.00 sys = 0.95 CPU) @ 10493.18/s (n=10000)
map: 1 wallclock secs ( 0.95 usr + 0.00 sys = 0.95 CPU) @ 10493.18/s (n=10000)
####
our @array2 = 1 .. 1000;
timethese 10000, {
"idiomatic" => q[ $_ +=2 for @array2; ],
"map" => q[ map $_ +=2, @array2; ],
};
__END__
Benchmark: timing 10000 iterations of idiomatic, map...
idiomatic: 1 wallclock secs ( 0.88 usr + 0.00 sys = 0.88 CPU) @ 11428.57/s (n=10000)
map: 1 wallclock secs ( 0.84 usr + 0.00 sys = 0.84 CPU) @ 11848.34/s (n=10000)