我正在尝试通过两个子例程来修改一个匿名哈希数组:
my $hashes = [{
foo => 'bar',
foobar => 'baz',
qux => { 'foo' => 'baz' },
}];
sub data_parser
{
my $data = shift;
while ((my $key, my $value) = each($data)) {
if (ref($value) ne '') {
__SUB__->($value);
} else {
$value = value_parser($value) if ($key eq 'foo');
print "data_parser() ${key}'s new value is: ${value}\n" if ($key eq 'foo');
}
}
}
sub value_parser { return('newvalue'); }
foreach my $hash (@{$hashes}) {
data_parser($hash);
print "foo is " . $hash->{'foo'} . "\n";
print "foo is " . $hash->{'qux'}{'foo'} . "\n";
}
输出结果为:
data_parser() foo's new value is: newvalue
data_parser() foo's new value is: newvalue
foo is bar
foo is baz
我期望value_parser()通过哈希引用修改数据结构,因此就地。 任何见解都将不胜感激,谢谢!
答案 0 :(得分:3)
您永远不会将$value
分配给任何内容。添加
$data->{$key} = $value;