2011-12-13 3 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]}; 

당신은있어 실제로 ref가 가리키는 것을 % {...}로 복사합니다.

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

도와 드리겠습니다. 대답을 수락 하시겠습니까? :) –