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);