Well, map does come to mind... ;-)
use strict; # define hash keys that need conversion # (others will be unchanged) my %map_foo_to_bar = ( gearbox => 'gearbox1', drivetrain => 'the_drivetrain', smokestack => 'my_smokestack', junkyard => '_junkyard', ); # our hash data my %foo = (gearbox => 'five-speed', drivetrain => 'automatic', something_else => 'entirely'); # perform the mapping (wrapped in an anonymous hashref) my $new_name; my $bar = { map { defined ($new_name = $map_foo_to_bar{$_}) ? ($new_name => $foo{$_}) : ($_ => $foo{$_}) } (keys %foo) };
Then from Data::Dumper:
$VAR1 = { 'the_drivetrain' => 'automatic', 'something_else' => 'entirely', 'gearbox1' => 'five-speed' };
I've come to think of map a potential solution whenever I want to apply the same operation to every element of an array or hash. In this case the "same operation" just happens to be a conditional -- if we have a new name defined for a given hash key, then use it, otherwise just keep the original hash key.
In reply to Re: Bulk Hash Assignment
by seattlejohn
in thread Bulk Hash Assignment
by tadman
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |