Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

Re: Merge hash into another hash

by ruzam (Curate)
on Nov 18, 2009 at 23:54 UTC ( [id://808064]=note: print w/replies, xml ) Need Help??


in reply to Merge hash into another hash

Unless I'm mistaken, both 'keys' and 'values' will make Perl gather up all the elements of each into temporary lists before even attempting to assign them. If %source is really huge, then that could be a problem?

If I thought memory use was a concern I'd walk the key values instead.

while (my($key, $value) = each %source) { $target{$key} = $value }

But I imagine Perl is pretty good at handling temporary lists, so I doubt looping through the keys would be as fast.

Update

... and just for fun

Update Again (used the wrong target in the benchmark)

cmpthese( -1, { grandfather => sub { my %t = %target; @t{keys %source} = values %source; }, sleepyjay => sub { my %t = %target; %t = ( %t, %source ); }, ruzam => sub { my %t = %target; while ( my($key, $value) = each %source) { # $target{$key} = $value <-- oops! $t{$key} = $value } }, }); __END__ Rate sleepyjay ruzam grandfather sleepyjay 905/s -- -58% -61% ruzam 2162/s 139% -- -8% grandfather 2349/s 160% 9% --

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others chanting in the Monastery: (5)
As of 2024-04-24 19:58 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found