我有这样的动态嵌套哈希引用:
my $hash = { 'a' => { 'b' => { 'c' => 'value' } } };
我想通过允许用户输入“a.b.c something”来将c的值设置为’something’.
现在可以像这样获得价值:
my $keys = 'a.b.c'; my $v='something'; my $h = $hash; foreach my $k(split /\./,$keys) { $h = $h->{$k}; } print $h; # "value"
但是我如何将key c的值设置为$v
print Dumper $hash;
会反映出这种变化吗? $h不是foreach循环结束时的ref,因此更改它不会反映$hash的更改.任何提示如何解决我头上的结?
解决方法
像这样的东西:
my $h = $hash; my @split_key = split /\./,$keys; my $last_key = pop @split_key; foreach my $k (@split_key) { $h = $h->{$k}; } $h->{$last_key} = $v;