在一个循环中我回归
我想创建一个散列哈希,其结构为数组,并在结尾处设置数据。
例如,如果我有:
@array = ('a','b','c');
$dataname = 'my data';
$datavalue = '123';
我想要一个哈希如下:
%hash = (
a => {
b => {
c => {
'my data' => '123'
}
}
}
);
但我没有找到任何地方怎么做。
答案 0 :(得分:3)
use Data::Diver qw( DiveVal );
DiveVal(\%hash, map \$_, @array, $dataname) = $datavalue;
可替换地,
sub DiveVal :lvalue {
my $p = \shift;
$p = \( $$p->{$_} ) for @_;
$$p
}
DiveVal(\%hash, @array, $dataname) = $datavalue;
答案 1 :(得分:0)
你可以这样做,它不是最有效的,但它的工作
use Data::Dumper;
my @array = ('a','b','c');
my $dataname = 'my data';
my $datavalue = '123';
my $hash = {$dataname => $datavalue};
foreach my $item (reverse @array){
$hash = {$item =>$hash};
}
my %hash =%$hash;
print Dumper(\%hash);
您将获得以下输出:
$VAR1 = {
'a' => {
'b' => {
'c' => {
'my data' => '123'
}
}
}
};