プロが教える店舗&オフィスのセキュリティ対策術

ハッシュのハッシュを行いたいですがうまくいきません。

◆正しい例

%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__

A 回答 (3件)

$hash{'key'} = %value;



のように、ハッシュの値としてハッシュを代入すること
はできません。コンパイルは通りますが意味不明の結果
となります。

ハッシュの値として使えるのはスカラーです。
従いまして、ハッシュのハッシュを実現するためには
リファレンスを使う必要があります。リファレンスは
スカラーの一種です。

メソッド1
$hash{'key'} = \%value;

メソッド2
$hash{'key'} = {'key' => 'value'};

メソッド3
$value_hash = {'key' => 'value'};
$hash{'key'} = $value_hash;

ご参考になれば幸いです。
    • good
    • 0

あんまり使わない方法ですが、こんな方法もあります。



$a{'JACK'} = {%b};
    • good
    • 1

$a{'JACK'} = \%b; #("\"を追加)



わずかな違いのようで、
実は大きな違いというべきなのかもしれませんが、
詳細は書籍などにおまかせします(^^;

ポイントとしては、
「参照」の扱い方が絡んでいます。
そのあたりを確認されてみると他にも面白い発見があるかもしれません。
    • good
    • 0

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