Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
PerlMonks  

Re^3: Merge hash into another hash

by SleepyJay (Beadle)
on Jul 16, 2009 at 23:05 UTC ( #780876=note: print w/ replies, xml ) Need Help??


in reply to Re^2: Merge hash into another hash
in thread Merge hash into another hash

For simple hashes, what's wrong with just:

my %target = ( #initialize ); %target = (%target, %source)
? (with the issues of complex cases, source checking, and dereferencing aside (but perhaps fixable))

jason.


Comment on Re^3: Merge hash into another hash
Download Code
Re^4: Merge hash into another hash
by linuxer (Deacon) on Jul 17, 2009 at 09:13 UTC

    Hi, let me try to explain with my limited knowledge of perl's internal behaviour ;o)

    Your solution converts %target and %source into flat lists, combines it to one list and assigns that list to %target...

    Grandfather's solution only inserts the key-value pairs from %source into %target, overwriting already existing pairs.

    This is less expensive than converting into lists and reassigning these lists.

    I tried a benchmark which shows that Grandfather's solution is faster than yours.

    I have to admit, that - until this post - I preferred and used the way you presented (mainly because of readability), but now I have to reconsider ;o)

    #!/usr/bin/perl # vim: set ts=4 sw=4 et sta: use strict; use warnings; use Benchmark qw( cmpthese ); my %target; my %source; ## prefill @target{'aa'..'zz' } = 'aa' .. 'zz'; @source{'ww'..'yy', 1..100} = ( 'ww'..'yy', 1..100 ); cmpthese( -1, { grandfather => sub { my %t = %target; @t{keys %source} = values %source; }, sleepyjay => sub { my %t = %target; %t = ( %t, %source ); }, }); __END__ Rate sleepyjay grandfather sleepyjay 598/s -- -62% grandfather 1585/s 165% -- Rate sleepyjay grandfather sleepyjay 649/s -- -62% grandfather 1706/s 163% --

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://780876]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others scrutinizing the Monastery: (4)
As of 2014-09-21 08:37 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (168 votes), past polls