sub mat_look { my $cells = shift; for my $p (@points) { exists $cells->{$p->[0]} or die; exists $cells->{$p->[0]}{$p->[1]} or die; } exists $cells->{'notfound'} and die; exists $cells->{'notfound2'} and die; exists $cells->{'notfound3'} and die; } #### timethese 200000, { Big => sub { big_look($big_ref) }, # $cells->{ ($p->[1] << 32) | ($p->[0] & 0xFFFFFFFF) } Lan => sub { lan_look($lan_ref) }, # $cells->{ "@$p" } Mat => sub { mat_look($mat_ref) }, # $cells->{ $_->[0] }{ $_->[1] } Pak => sub { pak_look($pak_ref) }, # $cells->{ pack "ii", $p->[0], $p->[1] } St2 => sub { st2_look($st2_ref) }, # $cells->{ join(':', @$p) } St3 => sub { st3_look($st3_ref) }, # $cells->{ $str } # optimized Str => sub { str_look($str_ref) }, # $cells->{ $p->[0] .':'. $p->[1] } }; #### $ /opt/perl-5.8.9/bin/perl test.pl Benchmark: timing 200000 iterations of Big, Lan, Mat, Pak, St2, St3, Str... Big: 6 wallclock secs ( 6.05 usr + 0.00 sys = 6.05 CPU) @ 33057.85/s (n=200000) Lan: 5 wallclock secs ( 4.84 usr + 0.00 sys = 4.84 CPU) @ 41322.31/s (n=200000) Mat: 7 wallclock secs ( 7.05 usr + 0.00 sys = 7.05 CPU) @ 28368.79/s (n=200000) Pak: 6 wallclock secs ( 5.67 usr + 0.00 sys = 5.67 CPU) @ 35273.37/s (n=200000) St2: 5 wallclock secs ( 4.47 usr + 0.00 sys = 4.47 CPU) @ 44742.73/s (n=200000) St3: 2 wallclock secs ( 2.38 usr + 0.00 sys = 2.38 CPU) @ 84033.61/s (n=200000) Str: 5 wallclock secs ( 4.90 usr + 0.00 sys = 4.90 CPU) @ 40816.33/s (n=200000) $ /opt/perl-5.10.1/bin/perl test.pl Benchmark: timing 200000 iterations of Big, Lan, Mat, Pak, St2, St3, Str... Big: 6 wallclock secs ( 6.30 usr + 0.00 sys = 6.30 CPU) @ 31746.03/s (n=200000) Lan: 5 wallclock secs ( 4.83 usr + 0.00 sys = 4.83 CPU) @ 41407.87/s (n=200000) Mat: 8 wallclock secs ( 7.47 usr + 0.01 sys = 7.48 CPU) @ 26737.97/s (n=200000) Pak: 6 wallclock secs ( 6.03 usr + 0.00 sys = 6.03 CPU) @ 33167.50/s (n=200000) St2: 4 wallclock secs ( 4.46 usr + 0.00 sys = 4.46 CPU) @ 44843.05/s (n=200000) St3: 3 wallclock secs ( 2.46 usr + 0.00 sys = 2.46 CPU) @ 81300.81/s (n=200000) Str: 5 wallclock secs ( 5.05 usr + 0.00 sys = 5.05 CPU) @ 39603.96/s (n=200000) $ /opt/perl-5.12.5/bin/perl test.pl Benchmark: timing 200000 iterations of Big, Lan, Mat, Pak, St2, St3, Str... Big: 7 wallclock secs ( 6.21 usr + 0.01 sys = 6.22 CPU) @ 32154.34/s (n=200000) Lan: 4 wallclock secs ( 4.85 usr + 0.00 sys = 4.85 CPU) @ 41237.11/s (n=200000) Mat: 7 wallclock secs ( 7.36 usr + 0.01 sys = 7.37 CPU) @ 27137.04/s (n=200000) Pak: 6 wallclock secs ( 5.90 usr + 0.00 sys = 5.90 CPU) @ 33898.31/s (n=200000) St2: 4 wallclock secs ( 4.47 usr + 0.00 sys = 4.47 CPU) @ 44742.73/s (n=200000) St3: 3 wallclock secs ( 2.45 usr + 0.00 sys = 2.45 CPU) @ 81632.65/s (n=200000) Str: 5 wallclock secs ( 5.04 usr + 0.00 sys = 5.04 CPU) @ 39682.54/s (n=200000) $ /opt/perl-5.14.4/bin/perl test.pl Benchmark: timing 200000 iterations of Big, Lan, Mat, Pak, St2, St3, Str... Big: 6 wallclock secs ( 6.16 usr + 0.00 sys = 6.16 CPU) @ 32467.53/s (n=200000) Lan: 5 wallclock secs ( 4.62 usr + 0.00 sys = 4.62 CPU) @ 43290.04/s (n=200000) Mat: 7 wallclock secs ( 7.42 usr + 0.00 sys = 7.42 CPU) @ 26954.18/s (n=200000) Pak: 6 wallclock secs ( 5.87 usr + 0.00 sys = 5.87 CPU) @ 34071.55/s (n=200000) St2: 4 wallclock secs ( 4.38 usr + 0.00 sys = 4.38 CPU) @ 45662.10/s (n=200000) St3: 3 wallclock secs ( 2.30 usr + 0.00 sys = 2.30 CPU) @ 86956.52/s (n=200000) Str: 5 wallclock secs ( 5.04 usr + 0.00 sys = 5.04 CPU) @ 39682.54/s (n=200000) $ /opt/perl-5.16.3/bin/perl test.pl Benchmark: timing 200000 iterations of Big, Lan, Mat, Pak, St2, St3, Str... Big: 7 wallclock secs ( 6.70 usr + 0.01 sys = 6.71 CPU) @ 29806.26/s (n=200000) Lan: 5 wallclock secs ( 4.84 usr + 0.00 sys = 4.84 CPU) @ 41322.31/s (n=200000) Mat: 7 wallclock secs ( 7.03 usr + 0.00 sys = 7.03 CPU) @ 28449.50/s (n=200000) Pak: 6 wallclock secs ( 6.32 usr + 0.00 sys = 6.32 CPU) @ 31645.57/s (n=200000) St2: 5 wallclock secs ( 4.43 usr + 0.00 sys = 4.43 CPU) @ 45146.73/s (n=200000) St3: 2 wallclock secs ( 2.40 usr + 0.00 sys = 2.40 CPU) @ 83333.33/s (n=200000) Str: 6 wallclock secs ( 5.45 usr + 0.01 sys = 5.46 CPU) @ 36630.04/s (n=200000) $ /opt/perl-5.18.4/bin/perl test.pl Benchmark: timing 200000 iterations of Big, Lan, Mat, Pak, St2, St3, Str... Big: 7 wallclock secs ( 6.82 usr + 0.00 sys = 6.82 CPU) @ 29325.51/s (n=200000) Lan: 5 wallclock secs ( 5.00 usr + 0.00 sys = 5.00 CPU) @ 40000.00/s (n=200000) Mat: 8 wallclock secs ( 7.64 usr + 0.00 sys = 7.64 CPU) @ 26178.01/s (n=200000) Pak: 6 wallclock secs ( 6.30 usr + 0.00 sys = 6.30 CPU) @ 31746.03/s (n=200000) St2: 5 wallclock secs ( 4.88 usr + 0.01 sys = 4.89 CPU) @ 40899.80/s (n=200000) St3: 3 wallclock secs ( 2.56 usr + 0.00 sys = 2.56 CPU) @ 78125.00/s (n=200000) Str: 6 wallclock secs ( 5.65 usr + 0.01 sys = 5.66 CPU) @ 35335.69/s (n=200000) $ /opt/perl-5.20.3/bin/perl test.pl Benchmark: timing 200000 iterations of Big, Lan, Mat, Pak, St2, St3, Str... Big: 7 wallclock secs ( 6.50 usr + 0.00 sys = 6.50 CPU) @ 30769.23/s (n=200000) Lan: 5 wallclock secs ( 5.02 usr + 0.00 sys = 5.02 CPU) @ 39840.64/s (n=200000) Mat: 7 wallclock secs ( 7.35 usr + 0.00 sys = 7.35 CPU) @ 27210.88/s (n=200000) Pak: 7 wallclock secs ( 6.25 usr + 0.00 sys = 6.25 CPU) @ 32000.00/s (n=200000) St2: 4 wallclock secs ( 4.61 usr + 0.00 sys = 4.61 CPU) @ 43383.95/s (n=200000) St3: 3 wallclock secs ( 2.68 usr + 0.00 sys = 2.68 CPU) @ 74626.87/s (n=200000) Str: 6 wallclock secs ( 5.63 usr + 0.00 sys = 5.63 CPU) @ 35523.98/s (n=200000) $ /opt/perl-5.22.4/bin/perl test.pl Benchmark: timing 200000 iterations of Big, Lan, Mat, Pak, St2, St3, Str... Big: 6 wallclock secs ( 5.89 usr + 0.00 sys = 5.89 CPU) @ 33955.86/s (n=200000) Lan: 5 wallclock secs ( 4.68 usr + 0.00 sys = 4.68 CPU) @ 42735.04/s (n=200000) Mat: 6 wallclock secs ( 6.76 usr + 0.01 sys = 6.77 CPU) @ 29542.10/s (n=200000) Pak: 6 wallclock secs ( 5.42 usr + 0.00 sys = 5.42 CPU) @ 36900.37/s (n=200000) St2: 5 wallclock secs ( 4.75 usr + 0.00 sys = 4.75 CPU) @ 42105.26/s (n=200000) St3: 2 wallclock secs ( 2.42 usr + 0.00 sys = 2.42 CPU) @ 82644.63/s (n=200000) Str: 5 wallclock secs ( 4.84 usr + 0.00 sys = 4.84 CPU) @ 41322.31/s (n=200000) $ /opt/perl-5.24.2/bin/perl test.pl Benchmark: timing 200000 iterations of Big, Lan, Mat, Pak, St2, St3, Str... Big: 6 wallclock secs ( 6.23 usr + 0.01 sys = 6.24 CPU) @ 32051.28/s (n=200000) Lan: 5 wallclock secs ( 4.52 usr + 0.00 sys = 4.52 CPU) @ 44247.79/s (n=200000) Mat: 7 wallclock secs ( 6.92 usr + 0.01 sys = 6.93 CPU) @ 28860.03/s (n=200000) Pak: 5 wallclock secs ( 5.58 usr + 0.00 sys = 5.58 CPU) @ 35842.29/s (n=200000) St2: 5 wallclock secs ( 4.53 usr + 0.00 sys = 4.53 CPU) @ 44150.11/s (n=200000) St3: 2 wallclock secs ( 2.30 usr + 0.00 sys = 2.30 CPU) @ 86956.52/s (n=200000) Str: 5 wallclock secs ( 4.74 usr + 0.01 sys = 4.75 CPU) @ 42105.26/s (n=200000) $ /opt/perl-5.26.0/bin/perl test.pl Benchmark: timing 200000 iterations of Big, Lan, Mat, Pak, St2, St3, Str... Big: 6 wallclock secs ( 6.04 usr + 0.01 sys = 6.05 CPU) @ 33057.85/s (n=200000) Lan: 4 wallclock secs ( 4.47 usr + 0.00 sys = 4.47 CPU) @ 44742.73/s (n=200000) Mat: 7 wallclock secs ( 7.00 usr + 0.01 sys = 7.01 CPU) @ 28530.67/s (n=200000) Pak: 6 wallclock secs ( 5.56 usr + 0.02 sys = 5.58 CPU) @ 35842.29/s (n=200000) St2: 5 wallclock secs ( 4.71 usr + 0.02 sys = 4.73 CPU) @ 42283.30/s (n=200000) St3: 2 wallclock secs ( 2.17 usr + 0.01 sys = 2.18 CPU) @ 91743.12/s (n=200000) Str: 5 wallclock secs ( 4.78 usr + 0.01 sys = 4.79 CPU) @ 41753.65/s (n=200000) #### $ /opt/cperl-5.24.2c/bin/cperl test.pl Benchmark: timing 200000 iterations of Big, Lan, Mat, Pak, St2, St3, Str... Big: 6 wallclock secs ( 5.58 usr + 0.01 sys = 5.59 CPU) @ 35778.18/s (n=200000) Lan: 4 wallclock secs ( 4.47 usr + 0.00 sys = 4.47 CPU) @ 44742.73/s (n=200000) Mat: 5 wallclock secs ( 5.98 usr + 0.00 sys = 5.98 CPU) @ 33444.82/s (n=200000) Pak: 5 wallclock secs ( 5.35 usr + 0.01 sys = 5.36 CPU) @ 37313.43/s (n=200000) St2: 4 wallclock secs ( 4.46 usr + 0.00 sys = 4.46 CPU) @ 44843.05/s (n=200000) St3: 3 wallclock secs ( 2.09 usr + 0.00 sys = 2.09 CPU) @ 95693.78/s (n=200000) Str: 4 wallclock secs ( 4.61 usr + 0.00 sys = 4.61 CPU) @ 43383.95/s (n=200000)