• ベストアンサー

ハッシュの配列???

基本的なことなのですが、 @data{qw(aaa bbb ccc)} と書くとどのようなデータ構造になるでしょうか? 要素に値を代入するにはどのように書けばいいでしょうか?

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

  • ベストアンサー
  • yuuki0229
  • ベストアンサー率70% (33/47)
回答No.4

この構文はスライスというものです。 my @tags = qw( id name comment ... ); my %data; @data{ @tags } = readdata(); 使うとすればこういったパターンになると思います。 用途と言えば「リスト値に一気に個別の名前をつける」といった感じです。 配列のスライスも($arr[0],$arr[1],$arr[2])が @arr[0,1,2]となるように「$が@になってるだけ」ですね。 Perl5では変数の先頭の記号がデータの形式を表すと理解すれば混乱は無くなるでしょう。

suzucchi
質問者

補足

ありがとうございました。よくわかりました。

その他の回答 (3)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

何をどうしたいのかよくわかりませんが、 >どのようなデータ構造になるでしょうか? use Data::Dumper; print Dumper(@data{qw(aaa bbb ccc)}); としてみるとどうなっているかわかると思います。 言われる通りハッシュの配列を作りたいということであれば @data = { aaa => 1, bbb => 2, ccc =>3 }; のようにすれば、ハッシュの配列を初期値をつけて作成することができます。 ハッシュが複数ある場合 @data = ({ aaa => 1, bbb => 2, ccc =>3 }, {…}, {…},…); のようにすれば良いかと思います。 その場合 print $data[0]{aaa}; $data[0]{aaa}=12; print $data[0]{aaa}; のようにして値の設定・取り出しができます。

suzucchi
質問者

お礼

丁寧な説明、どうもありがとうございました。

noname#25358
noname#25358
回答No.2

 目的がはっきりしないので分かりませんが、その記述はたぶん違います(^_^;  最終的にどのようなことを行いたいのでしょうか?  @data の中に値を1つずつ入れたいのであれば、 @data = ( 'aaa', 'bbb', 'ccc' );  とします。  これを取り出す場合、 print $data[0];  などとします。

suzucchi
質問者

補足

違いません。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「要素に値を代入する」というのは「何に」代入するのか読み取れないけど, @data{qw(aaa bbb ccc)} は ($data{aaa}, $data{bbb}, $data{ccc}) じゃない?

suzucchi
質問者

お礼

…ですよね。 ($data{aaa}, $data{bbb}, $data{ccc}) が @data{"id", "user", "addr"} と表記されることが 直感的にわかりづらいのですが、 どのように理解すればよいですか?

関連するQ&A

専門家に質問してみよう