• ベストアンサー

ハッシュのハッシュを実現したい。

ハッシュのハッシュを行いたいですがうまくいきません。 ◆正しい例 %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__

質問者が選んだベストアンサー

  • ベストアンサー
noname#5910
noname#5910
回答No.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)
回答No.2

あんまり使わない方法ですが、こんな方法もあります。 $a{'JACK'} = {%b};

回答No.1

$a{'JACK'} = \%b; #("\"を追加) わずかな違いのようで、 実は大きな違いというべきなのかもしれませんが、 詳細は書籍などにおまかせします(^^; ポイントとしては、 「参照」の扱い方が絡んでいます。 そのあたりを確認されてみると他にも面白い発見があるかもしれません。

関連するQ&A