develooper Front page | perl.perl5.porters | Postings from June 2010

[perl #76146] Re: perlperf.pod wrong example

From:
Richard Foley
Date:
June 28, 2010 02:56
Subject:
[perl #76146] Re: perlperf.pod wrong example
Message ID:
rt-3.6.HEAD-13696-1277669209-536.76146-75-0@perl.org
# 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






nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About