電子書籍の厳選無料作品が豊富!

ハッシュのキーのリストを取ってきたいのですが、期待通りの動きをしてくれません。
いろいろ試したところ、以下のようなコードを作成した時、エラーになるようです。この場合、son, daughter, papi, mamaだけを出力したいのに、uncleが混じってきます。
正しいキーを抽出するには、どうしたら良いのでしょうか?
perlのバージョンは、5.8.8です。

my %family = (
son => {age => 27, sex => man, height => 175},
daughter => {age => 20, sex => woman, height => 160},
papi => {age => 60, sex => man, height => 170},
mama => {age => 57, sex => woman, height => 161},
);

if(exists $family{'uncle'}->{age}){
}

foreach my $key(keys %family){
printf "%s\n", $key;
}

A 回答 (2件)

if文内で上位のキーを不意に作成してしまうのが原因ですね。


上位のキーがあるときに下位のキーを調べるという書き方にすれば解決できますよ。


if ( exists $family{'uncle'} && exists $family{'uncle'}->{age} ) {
}
    • good
    • 0
この回答へのお礼

なるほど、と思いました。
簡潔で、明快な解答をありがとうございます。
思い通りの結果が得られました。

お礼日時:2008/05/21 15:45

>if(exists $family{'uncle'}->{age}){


このチェックを
if(exists $family{'uncle'}){
としたらどうなりますか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
全然、思いつかなかったのですが、if(exists $family{'uncle'}){ だと、問題なくキーを抽出できました。

お礼日時:2008/05/21 15:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!