use Benchmark qw(:all); my ($resultPre, $resultNormal); timethese(-100, { preAssign => sub { my %h; keys %h = 1e8; $h{$_} = $_ for 1..1e8; $resultPre = scalar %h unless $resultPre; }, normal => sub { my %h; $h{$_} = $_ for 1..1e8; $resultNormal = scalar %h unless $resultNormal; }, }); print "Pre: $resultPre\n"; print "Normal: $resultNormal\n";