1

我有一个子例程,它获取一个哈希引用作为参数。

我可以通过引用来操作单个哈希值。我想替换参考点所在的整个散列,以便该散列引用的任何地方都可以看到更改。

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",
    };
}

那可能吗?

4

3 回答 3

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

%$hashref表示“$hashref引用的哈希”,并且分配给该哈希会替换其内容,就像不涉及引用一样。

于 2012-10-17T20:35:38.700 回答
1

只需分配给取消引用的哈希:

my $hashref = shift;
%$hashref = ();
于 2012-10-17T20:36:11.090 回答
1

要替换引用哈希的内容:

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

(如果%hash是hash,简称%{ $hashref }hash ref %$hashref。)

要替换引用本身:

sub replace{
    $_[0] = { key1 => "value1", key2 => "value2" };
}
于 2012-10-17T20:36:18.423 回答