That is easier to read, and much more clearly signals intent. It is also at least as fast as the map version. (It used to be a lot faster, but in Perl 5.8 there is an optimization that causes map to shortcircuit to become a for if it is in null context.)$hash1{$_} = $hash2{$_} for keys %hash2;
Furthermore performance is far less likely to matter than most people think, and when it does having micro-optimized as you went is generally a bad strategy for getting it. (You want to keep code clean and then look for a better algorithm, or move a small section into C.) Therefore I would generally use the following strategy because it is even clearer, even though it is marginally slower on my machine (about 10% so):
And, of course, in the rare case that performance really mattered and I really wanted to work in Perl, it is fastest to avoid having to do 2 sets of hash lookups on %hash2:@hash1{keys %hash2} = values %hash2;
$combined{$k} = $v while my ($k, $v) = each %hash2;
In reply to Re^2: Concerning hash operations (appending, concatenating)
by tilly
in thread Concerning hash operations (appending, concatenating)
by RazorbladeBidet
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |