# New Ticket Created by Richard Foley # Please include the string: [perl #76146] # in the subject line of all future correspondence about this issue. # <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=76146 > Hi Daniel, Thanks very much for your feedback - anticipating your patch to fix ?-) -- Richard Foley Ciao - shorter than aufwiedersehen http://www.rfi.net/ On Sunday 25 April 2010 15:20:22 Daniel Pfeiffer wrote: > In the dereference benchmark you make exactly the mistake you warn of > before: you change several factors at once and show an overdrawn > conclusion. While refactoring out the common $ref->{ref} to access it > only once, you unnecessarily also copy both strings to a local > variable. It is this second action that drives the time up, if you > leave that out and run timethese several times your findings are still > right, but far less. If however you need a third or more values (which > I added of the same length), dereferencing the outer hash only once > becomes a clear winner: > > timethese(1000000, { > '2direct' => sub { > my $x = $ref->{ref}{_myscore} . $ref->{ref}{_yourscore} ; > }, > '2wrong' => sub { > my $ref = $ref->{ref}; > my $myscore = $ref->{_myscore}; # why? > my $yourscore = $ref->{_yourscore}; # why? > my $x = $myscore . $yourscore; > }, > '2dereference' => sub { > my $ref = $ref->{ref}; > my $x = $ref->{_myscore} . $ref->{_yourscore}; > }, > '3direct' => sub { > my $x = $ref->{ref}{_myscore} . $ref->{ref}{_yourscore} . > $ref->{ref}{_ourscore}; > }, > '3dereference' => sub { > my $ref = $ref->{ref}; > my $x = $ref->{_myscore} . $ref->{_yourscore} . > $ref->{_ourscore}; > }, > }); > > Btw. I have left out the intermediate arrow, making it less of an > eyesore and easier to understand as a two dimensional hash. > > coralament / best Grötens / liebe Grüße / best regards / elkorajn salutojn > Daniel Pfeiffer