首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl Hash by reference

Perl Hash by reference
EN

Stack Overflow用户
提问于 2011-12-14 05:25:53
回答 1查看 484关注 0票数 3

因此,我正在尝试编写一个子例程,该例程接受一个散列参数并向其添加两个键值对(通过引用)。到目前为止,我得到了以下内容:

代码语言:javascript
复制
addParams(\%params);

sub addParams
{
    my(%params) = %{$_[0]}; #First argument (as a hash)

    $params{"test"} = "testing";
}

但由于某些原因,它似乎没有添加“test”键。我是第一次接触Perl,但是这不是通过引用传递散列的方式吗?事先谢谢你。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-14 05:29:17

您可以在不取消引用的情况下使用hash-ref:

代码语言:javascript
复制
addParams(\%params);

sub addParams
{
    my $params = shift;

    $params->{"test"} = "testing";
}

编辑:

为了解决代码的问题,当你这样做的时候:

代码语言:javascript
复制
my(%params) = %{$_[0]};

您实际上是在用%{...}复制引用所指向的内容。你可以通过一个分解的例子看到这一点(没有函数,相同的功能):

代码语言:javascript
复制
my %hash = ( "foo" => "foo" );
my %copy = %{ \%hash };

$hash{"bar"} = "bar";
$copy{"baz"} = "baz";

print Dumper( \%hash );
print Dumper( \%copy );

运行:

代码语言:javascript
复制
$ ./test.pl
$VAR1 = {
          'bar' => 'bar',
          'foo' => 'foo'
        };
$VAR1 = {
          'baz' => 'baz',
          'foo' => 'foo'
        };

这两个散列都有原始的'foo => foo',但现在每个散列都有各自不同的bar/baz。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8496376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档