2012-11-05 3 views
1

중첩 해시를 사용하는 데이터 구조의 항목을 반복 처리하려고합니다. 이렇게하려면 어떤 키가 있는지보고 싶었습니다.perl에서 해시 해시를 반복하는 중입니다. 이 접근 방식의 문제점은 무엇입니까?

다음은 내가 시도한 것입니다. 그러나 오류가 발생했습니다

my %tgs = (
     'articles' => { 
          'vim' => 'about vim', 
          'awk' => 'about awk', 
          'sed' => 'about sed' 
         }, 
     'ebooks' => { 
          'linux 101' => 'about linux', 
         } 
    ); 

    foreach my $k (keys %tgs){ 
     print $k; 
     print "\n"; 
     foreach my $k2 (keys %$tgs{$k}){ #<-----this is where perl is having a problem 
      print $k2; 
      print "\n"; 
     } 
    } 

syntax error at PATH line #, near "$tgs{" 
syntax error at PATH line #, near "}" 
Execution of PATH aborted due to compilation errors. 

내 접근 방식에있어 문제점이 있습니까? 내 추론은 $ tgs {$ k}가 해시의 참조를 반환하기 때문에, 각 루프마다 참조 할 수 있지만 추측하지는 않습니까?

답변

7

당신은 $tgs{$k} 주위에 괄호가 필요합니다

foreach my $k2 (keys %{$tgs{$k}}){ #<-----this is where perl is having a problem 

전체 코드는 다음과 같습니다

foreach my $k1 (keys %tgs){ 
    print "Key level 1: $k1\n"; 
    foreach my $k2 (keys %{$tgs{$k1}}) { 
     print " Key level 2: $k2\n"; 
    } 
} 
관련 문제