2013-02-21 2 views
0

해시 해시를 역 참조하는 방법을 알고 내 서브 루틴에서 사용할 수 있습니다. 보시다시피, 내 서브 루틴 내 해시 해시 데이터 구조에 액세스하는 데 문제가 있습니다.참조 및 dereference 해시의 해시에 대한 해시에 대한 Perl

my $HoH_ref = \%HoH;  # reference the hash of hashes 

for(@sorted) { 
print join("\t", $_, get_num($_, $HoH_ref)) 
} 

sub get_num { 
    my ($foo) = shift; 
    my $HoH_ref = shift; 
    my %HoH = %{$HoH_ref}; # dereference the hash of hashes 
    my $variable = %HoH{$foo}{'name'}; 
    # do stuff 
    return; 
    } 

나는 %HoH{ 근처에서 마지막 줄 %HoH{$protein}{'degree'}에 두 번째에 구문 오류를 받고 있어요 및 해시의 해시 %HoH에서 $protein 키를 인식하지 못합니다. 오류 메시지가 나타납니다 : Global symbol "$protein" requires explicit package name. 덕분에

+3

사용'$ 상반기 {$ foo는} { '이름'} '대신 %의 상반기'의 {$ foo는} {'이름 '}' . –

+1

아, 그래. 감사합니다 – cooldood3490

+1

http://perlmonks.org/?node=References+quick+reference – ysth

답변

3

해시 요소에 액세스하는 구문은 %hash{KEY}이 아니라 $hash{KEY}이 아닙니다.

my %HoH = %{$HoH_ref}; 
my $variable = $HoH{$foo}{name}; 
      ^
       | 

그러나 전체 해시를 복사하는 것은 바보입니다. 없이 이야기 전체 스크립트를 볼 어렵다하지만 난 당신이 원하는 생각

my $variable = $HoH_ref->{$foo}{name};