전종필 Tip: 배열의 배열과 같은 맥락의 팁입니다.
배열의 배열에서 보시는 것과 같은
방법으로 리퍼런스(참조)를 이용하여 해쉬의 해쉬를 만듭니다.
%classA = (
name => '개나리반', howmany => 15, teacher => '펄아비', perform => 'GOOD'
);
%classB = (
name => '민들레반', howmany => 17, teacher => '펄어미', perform => 'BEST'
);
%classC = (
name => '쑥갓반', howmany => 14, teacher => '펄맨', perform => 'OOPS'
);
위의 자료를 다시 해쉬에 넣을 예정입니다. 배열의 리퍼런스가 \@array인 것처럼,
해쉬의 리퍼런스도 \%hash입니다. 따라서,
%everyClass = ( a => \%classA, b => \%classB, c => \%classC );
와 같이 해쉬의 해쉬를 만듭니다.
위 과정을 하나로 처리하려면 이름없는 배열을
[와 ]로 만드는 것과 유사하게 {와 }를 사용하여 이름없는 해쉬(anonymous
hash)를 만듭니다. (아마 일관적인 규칙을 눈치채셨을 것입니다.)
%everyClass = (
a => {
name => '개나리반', howmany => 15, teacher => '펄아비', perform => 'GOOD'
},
b => {
name => '민들레반', howmany => 17, teacher => '펄어미', perform => 'BEST'
},
c => {
name => '쑥갓반', howmany => 14, teacher => '펄맨', perform => 'OOPS'
}
);
해쉬 리퍼런스를 해쉬로 사용하려면 앞에 %를 붙입니다. 이 때, %가 적용될 리퍼런스전체를 {
}로 감싸주어 우선 순위에 대한 문제를 해결합니다. 개별 요소에 대한 접근은 ->{ }를 사용합니다.
print "$everyClass{a}->{teacher}\n"; # 펄아비
print "$everyClass{c}->{howmany}\n"; # 14
foreach my $class ( sort keys %everyClass ) {
foreach my $key ( sort keys %{$everyClass{$class}} ) { # {}로 리퍼런스를 감싼 모습
print " $key: $everyClass{$class}->{$key}\n"; # 개별 요소 접근
}
print "\n";
}
(위에서 잠시 언급한 역참조와 관련한 우선순위 문제에 대해서는 또 다른 Tip으로
설명하겠습니다.) |
|