- ベストアンサー
ハッシュのハッシュを実現したい。
ハッシュのハッシュを行いたいですがうまくいきません。 ◆正しい例 %ultraman = ( TARO => { cpu => "Celeron(266MHz)", memory=> "32MB", hdd => "4.3GB", }, JACK => { cpu => "Pentium2(333Mhz*2)", memory=> "128MB", hdd => "9GB*4", }, ); $name = "JACK"; $item = "cpu"; print "\$ultraman{$name}{$item}=[$ultraman{$name}{$item}]"; exit(0); __END__ ◆このように使えたら便利(要はハッシュの代入でハッシュのハッシュを実現したい) %a=(); %b = ("cpu"=>"aaaa", "memory"=>"bbbb"); $a{'JACK'} = %b; #---> このように代入したい $name = "JACK"; $item = "cpu"; print "\$a{$name}{$item}=[$a{$name}{$item}]"; exit(0); __END__
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
$hash{'key'} = %value; のように、ハッシュの値としてハッシュを代入すること はできません。コンパイルは通りますが意味不明の結果 となります。 ハッシュの値として使えるのはスカラーです。 従いまして、ハッシュのハッシュを実現するためには リファレンスを使う必要があります。リファレンスは スカラーの一種です。 メソッド1 $hash{'key'} = \%value; メソッド2 $hash{'key'} = {'key' => 'value'}; メソッド3 $value_hash = {'key' => 'value'}; $hash{'key'} = $value_hash; ご参考になれば幸いです。
その他の回答 (2)
- zebedeer
- ベストアンサー率66% (80/121)
あんまり使わない方法ですが、こんな方法もあります。 $a{'JACK'} = {%b};
- natsuki_tk
- ベストアンサー率35% (99/279)
$a{'JACK'} = \%b; #("\"を追加) わずかな違いのようで、 実は大きな違いというべきなのかもしれませんが、 詳細は書籍などにおまかせします(^^; ポイントとしては、 「参照」の扱い方が絡んでいます。 そのあたりを確認されてみると他にも面白い発見があるかもしれません。