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% --