#!/usr/bin/env perl
use v5.10;
use Benchmark qw(cmpthese timethese);
my $dsid = 1;
sub name_to_number {
my $name = shift;
if ( $name = 'rock' ) {
return 0;
}
elsif ( $name = 'spock' ) {
return 1;
}
elsif ( $name = 'paper' ) {
return 2;
}
elsif ( $name = 'lizard' ) {
return 3;
}
elsif ( $name = 'scissors' ) {
return 4;
}
else {
return "your choice is wrong";
}
}
my %map = (
rock => 0,
spock => 1,
paper => 2,
lizard => 3,
scissors => 4
);
sub name_to_number_map {
my $name = shift;
return $map{$name} || "your choice is wrong";
}
my $n = 1_000_000;
say $n;
cmpthese(
$n,
{
func => sub { name_to_number('rock') },
map => sub { name_to_number_map('rock') },
}
);
$n = 10_000_000;
say $n;
cmpthese(
$n ,
{
func => sub { name_to_number('rock') },
map => sub { name_to_number_map('rock') },
}
);
timethese(
1_000_000,
{
func => sub { name_to_number('rock') },
map => sub { name_to_number_map('rock') },
}
)
__END__
1000000
(warning: too few iterations for a reliable count)
Rate func map
func 2500000/s -- -12%
map 2857143/s 14% --
10000000
Rate func map
func 2336449/s -- -6%
map 2475248/s 6% --
Benchmark: timing 1000000 iterations of func, map...
func: 1 wallclock secs ( 0.40 usr + 0.00 sys = 0.40 CPU) @ 2500000.00/s (n=1000000)
map: 1 wallclock secs ( 0.42 usr + 0.00 sys = 0.42 CPU) @ 2380952.38/s (n=1000000)