# 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