2011-12-13 191 views
3

所以我想寫一個子程序,它需要一個哈希參數並向它添加一對鍵值對(通過引用)。到目前爲止,我得到了這個:引用Perl哈希

addParams(\%params); 

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

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

但是由於某種原因,它似乎沒有添加'測試'鍵。我是Perl的新手,但不是這樣如何通過引用傳遞散列?事先感謝。

回答

12

可以使用哈希裁判沒有去引用它:

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' 
     }; 

兩個哈希有原來的「富=>富」,但現在各有各的不同的酒吧/巴茲的。

+0

啊,完美,謝謝! – SuperTron 2011-12-13 21:31:58