因此,我正在尝试编写一个子例程,该例程接受一个散列参数并向其添加两个键值对(通过引用)。到目前为止,我得到了以下内容:
addParams(\%params);
sub addParams
{
my(%params) = %{$_[0]}; #First argument (as a hash)
$params{"test"} = "testing";
}但由于某些原因,它似乎没有添加“test”键。我是第一次接触Perl,但是这不是通过引用传递散列的方式吗?事先谢谢你。
发布于 2011-12-14 05:29:17
您可以在不取消引用的情况下使用hash-ref:
addParams(\%params);
sub addParams
{
my $params = shift;
$params->{"test"} = "testing";
}编辑:
为了解决代码的问题,当你这样做的时候:
my(%params) = %{$_[0]};您实际上是在用%{...}复制引用所指向的内容。你可以通过一个分解的例子看到这一点(没有函数,相同的功能):
my %hash = ( "foo" => "foo" );
my %copy = %{ \%hash };
$hash{"bar"} = "bar";
$copy{"baz"} = "baz";
print Dumper( \%hash );
print Dumper( \%copy );运行:
$ ./test.pl
$VAR1 = {
'bar' => 'bar',
'foo' => 'foo'
};
$VAR1 = {
'baz' => 'baz',
'foo' => 'foo'
};这两个散列都有原始的'foo => foo',但现在每个散列都有各自不同的bar/baz。
https://stackoverflow.com/questions/8496376
复制相似问题