Benchmark: running ID Field, Numeric, Refaddr, String for at least 3 CPU seconds...
ID Field: 4 wallclock secs ( 3.43 usr + 0.03 sys = 3.46 CPU) @ 1044124.57/s (n=3612671)
Numeric: 4 wallclock secs ( 3.34 usr + 0.04 sys = 3.38 CPU) @ 989664.50/s (n=3345066)
Refaddr: 5 wallclock secs ( 3.08 usr + 0.03 sys = 3.11 CPU) @ 912330.23/s (n=2837347)
String: 4 wallclock secs ( 3.09 usr + 0.04 sys = 3.13 CPU) @ 747332.27/s (n=2339150)
####
Rate String Refaddr Numeric ID Field
String 747332/s -- -18% -24% -28%
Refaddr 912330/s 22% -- -8% -13%
Numeric 989664/s 32% 8% -- -5%
ID Field 1044125/s 40% 14% 6% --
####
#!perl -w
use strict;
use Benchmark qw(:all);
use Scalar::Util qw(refaddr);
my $r = [0];
sub string {
pack("A", "$r");
}
sub numeric {
pack("J", $r+0);
}
sub addr {
pack("J", refaddr $r);
}
sub field {
pack("J", $r->[0]);
}
my $result = timethese(-3, {
String => \&string,
Numeric => \&numeric,
Refaddr => \&addr,
"ID Field" => \&field,
});
cmpthese($result);