我有一组存储在数组中的键,我希望将其拼接成嵌套的哈希。例如,我可能有:
$hash->{$key1} = $value;
我想要做的是在哈希中添加额外的维度,例如:
my @array = ( $key2, $key3 ) ;
给予
$hash->{$key1}->{$key2}->{$key3} = $value;
我事先并不知道数组中有多少个键。
答案 0 :(得分:1)
这是你的意思吗?
use strict;
use warnings 'all';
my @keys = qw/ a b c /;
my $val = 99;
my $hash = { };
{
my $h = $hash;
$h = $h->{ shift @keys } = {} while @keys > 1;
$h->{ shift @keys } = $val;
}
use Data::Dumper;
print Dumper $hash;
$VAR1 = {
'a' => {
'b' => {
'c' => 99
}
}
};
答案 1 :(得分:1)
use Data::Diver qw( DiveVal );
DiveVal($hash, map \$_, $key1, @array) = $value;
-or-
DiveVal($hash->{$key1}, map \$_, @array) = $value;
或
sub dive_val :lvalue { my $p = \shift; $p = \( $$p->{$_} ) for @_; $$p }
dive_val($hash, $key1, @array) = $value;
-or-
dive_val($hash->{$key1}, @array) = $value;