in reply to Optimize a perl block

Hello all,

I originally post this question on stackexchange the 1st of September (link here), it seems IruP "stole" my question and post-it here and so it was closed on stackexchange. Well it is not very serious.

To return to the subject; after initial advise on stackexchange i have already replaced keys %{ $hash_ref } by my @keys = keys %$hash_ref;, after this modification it runs about 20% more quickly.

Now i just tested the Eily tricks with $i += $cache{$b_} //= sum map { $_->{value} } @{ $foo->{$b_} }{@keys}; and it is just really impressive, the gain is again almost 60% ! :)

To be honest i did not understand anything on what is going on and the condensed form of the code do not help me but i will look at your links and try to understand. Meanwhile if you have time to give me a "simple" explanation of how your code works i will take it ! ;)

More informations about data:
* array_ref is about 2 millions entries, keys are unique
* split of $a give 5 elements
* hash_ref is small, about 10 entries and keys are unique too

Replies are listed 'Best First'.
Re^2: Optimize a perl block
by llavaud (Novice) on Sep 08, 2017 at 09:11 UTC
    ok i think i got it, finally it is not so hard to understand, i am just not familiar with the "slice" form @{ $foo->{$b_} }{@keys}.

    thanks for your help !

      Hi llavaud, welcome to the monastery. I'm glad that you got it, but feel free to ask if you need more details.

        thanks,

        just another small thing, i read that foreach is more efficient than map, but i can't adapt your code to use it with the sum, maybe it is not possible ?