ハッシュのリファレンス同士のマージ.
ハッシュのリファレンス同士をマージさせるには,
CPAN モジュールの Hash::Merge を使うと便利です.
ただし, Hash::Merge を使わなくても数行でいけます.
## $hashref1 に $hashref1 をマージする.
my $hash1 = +{};
my $hash2 = +{};my @array = keys %$hash2;
my $hoge = undef;
for (@array) {
$hoge = $hash2->{$_};
$hash1->{$_} = $hoge;
}
以下, man Hash::Merge
NAME
Hash::Merge - Merges arbitrarily deep hashes into a single hashSYNOPSIS
use Hash::Merge qw( merge );
my %a = (
’foo’ => 1,
’bar’ => [ qw( a b e ) ],
’querty’ => { ’bob’ => ’alice’ },
);
my %b = (
’foo’ => 2,
’bar’ => [ qw(c d) ],
’querty’ => { ’ted’ => ’margeret’ },
);my %c = %{ merge( \%a, \%b ) };
Hash::Merge::set_behavior( ’RIGHT_PRECEDENT’ );
# This is the same as above
Hash::Merge::specify_behavior(
{
’SCALAR’ => {
’SCALAR’ => sub { $_[1] },
’ARRAY’ => sub { [ $_[0], @{$_[1]} ] },
’HASH’ => sub { $_[1] },
},
’ARRAY => {
’SCALAR’ => sub { $_[1] },
’ARRAY’ => sub { [ @{$_[0]}, @{$_[1]} ] },
’HASH’ => sub { $_[1] },
},
’HASH’ => {
’SCALAR’ => sub { $_[1] },
’ARRAY’ => sub { [ values %{$_[0]}, @{$_[1]} ] },
’HASH’ => sub { Hash::Merge::_merge_hashes( $_[0], $_[1] ) },
},
},
’My Behavior’,
);