2011-12-13 10 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"; 
} 

EDIT:あなたが行うとき

、あなたのコードの問題に対処するには、次の

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」を持っていますが、今、それぞれが自分を持っています異なるバー/バズ。

+0

ああ、完璧、ありがとう! – SuperTron

+0

お気軽にお問い合わせください。答えを受け入れる? :) –

関連する問題