无法修改子例程内的匿名哈希引用

时间:2013-10-25 12:58:11

标签: perl hash reference subroutine

我正在尝试通过两个子例程来修改一个匿名哈希数组:

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()通过哈希引用修改数据结构,因此就地。 任何见解都将不胜感激,谢谢!

1 个答案:

答案 0 :(得分:3)

您永远不会将$value分配给任何内容。添加

$data->{$key} = $value;