2013-06-11 3 views
2

방금 ​​Perl을 선택했습니다. 해시 값에 액세스하는 데 약간의 혼란이 있습니다. 아래 코드는 해시 내부의 해시 값에 액세스하려고 시도하는 코드입니다. 간단한 텍스트 편집기를 사용하여 코드를 작성 했으므로 문제점을 파악할 수 없습니다. 구문이 해시에 대한Perl : 해시 내의 해시 값에 액세스합니다.

keys %hash 

인 경우

my %box = (
    Milk => { 
     A => 5, 
     B => 10, 
     C => 20, 
    }, 
    Chocolate => { 
     AB => 10, 
     BC => 25, 
     CD => 40, 
    }, 
); 

foreach my $box_key(keys %box) { 
    foreach my $inside_key (keys %box{box_key}) 
    print "$box_key"."_$inside_key""is for rupees $box{box_key}{inside_key}"; 
} 

답변

-1

이케가 아주 잘 설명하고 난 당신을 도움이되기를 바랍니다, 당신은 여전히 ​​당신은 문제가있는 이유는, 아래의 코드를 시도의 코드에서 뭔가를 누락 생각합니다.

my %box = (
    Milk => { 
     A => 5, 
     B => 10, 
     C => 20, 
    }, 
    Chocolate => { 
     AB => 10, 
     BC => 25, 
     CD => 40, 
    }, 
); 

foreach my $box_key(keys %box) { 
    foreach my $inside_key (keys $box{$box_key}) { 
     print "${box_key}_$inside_key is for rupees $box{$box_key}{$inside_key}\n"; 

    } 
} 

출력 :

Chocolate_CD is for rupees 40 
Chocolate_BC is for rupees 25 
Chocolate_AB is for rupees 10 
Milk_A is for rupees 5 
Milk_C is for rupees 20 
Milk_B is for rupees 10 
+0

"_"가,'인쇄 $의 box_key를 작성하는 더 나은 스타일에 대해 $의 inside_key, ".."'또는'인쇄 "$ {box_key} _ $의 inside_key. . " –

+0

@mpapec : updated thanks –

+0

undereferenced-argument 버전의 키를 제공해서는 안됩니다. 대부분의 perl 버전에서는 구문 오류입니다. – tchrist

3

도와주세요, 그것은 해시 참조

keys %{ ... } 

을합니다. 이 경우, 참조가 $box{$box_key}에 저장됩니다, 그래서 당신은 사용하십시오

keys %{ $box{$box_key} } 
또한

, 실제로 의해 명명 된 요소를 원하는 위치에 당신은 장소의 몇 box_keyinside_key라는 이름의 요소를 액세스하는 $box_key$inside_key.

마지막으로 변수 이름 주위에 curlies를 사용하여 변수 이름이 끝나는 Perl을 지시 할 수 있습니다.


for my $box_key (keys %box) { 
    for my $inside_key (keys %{ $box{$box_key} }) { 
     print "${box_key}_$inside_key is for rupees $box{$box_key}{$inside_key}\n"; 
    } 
}