2012-10-17 108 views
1

我有一个子程序,它获取作为参数的哈希引用。
用Perl中的hashreference替换哈希?

我可以通过引用操纵单个哈希值。 我想要替换整个散列,它的参考点在,以至于无处不在,在这个散列引用的地方,这些更改变得可见。

sub replace{ 
    my $hashref = shift; 

    # can manipulate hash here 
    $hashref->{key} = "newValue"; 

    # how to replace replace the hash here by a new hash 
    $newHashRef = { 
     key => "value", 
     key2 => "value2", 
    }; 
} 

这可能吗?

回答

1
%$hashref = (
    key => "value", 
    key2 => "value2", 
); 

%$hashref表示“这$hashref指的是哈希”,并指定该散列替换其内容,只是因为它会如果没有引用参与。

1

刚分配到解除引用的哈希:

my $hashref = shift; 
%$hashref =(); 
1

要更换引用的散列的内容:

sub replace{ 
    my $hashref = shift; 
    %$hashref = (key1 => "value1", key2 => "value2"); 
} 

(如果它是%hash的哈希值,它是%{ $hashref }哈希参考,%$hashref为短)。

要替换参考本身:

sub replace{ 
    $_[0] = { key1 => "value1", key2 => "value2" }; 
}