If you wish to ignore Tanktalus's good advice and sweat the small stuff then a benchmark gives an answer. Normal benchmark caveats apply of course - like the benchmark may not indicate anything at all about your particular situation.
use strict; use warnings; use Benchmark qw(cmpthese); use constant kHalfMax => 509; # Must be odd my %Contracts = (1..4 * kHalfMax); # kHalfMax * 2 key/value pairs my $key = kHalfMax; cmpthese (-1, { lookup => \&lookup, refit => \&refit, } ); sub lookup { return if $Contracts{$key} == 1; return if $Contracts{$key} == 1; return if $Contracts{$key} == 1; return if $Contracts{$key} == 1; return if $Contracts{$key} == 1; return if $Contracts{$key} == 1; return if $Contracts{$key} == 1; return if $Contracts{$key} == 1; } sub refit { my $ref = \$Contracts{$key}; return if $$ref == 1; return if $$ref == 1; return if $$ref == 1; return if $$ref == 1; return if $$ref == 1; return if $$ref == 1; return if $$ref == 1; return if $$ref == 1; }
Result:
Rate lookup refit lookup 443125/s -- -32% refit 648621/s 46% --
Note that the result is somewhat sensitive to the number of key/value pairs in the hash. 46% is about the largest difference I've seen.
Note too that at about 200 nano-seconds per access this tweak is unlikely to make much difference to most applications. Code clarity would be a much more important consideration!
In reply to Re: Ref to hash entries are faster?
by GrandFather
in thread Ref to hash entries are faster?
by Wiggins
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |