推しミネラルウォーターはありますか?

初歩的な質問ですみません。
以下のような変数はどんな構造になっているのでしょうか?
配列の中にハッシュが入っているのかと思っているのですが・・

$list = [
{ id => '1', name => 'hoge' },
{ id => '2', name => 'fuga' },
{ id => '3', name => 'foo' }
];

上記の$listにあるidを全て出力しようとして以下のようにしても
出力することができません。
foreach ($list) {
print $_['id'];
print '<br>';
}

また「[]、{}」は何を意味するのでしょうか?
当方、PHPには詳しいのですがPerlは最近始めたばかりでよく理解できておりません。
お手数ですが、どなたかお分かりになる方いましたらご教授いただければと思います。

A 回答 (1件)

無名配列、無名ハッシュ、リファレンス


以上をキーワードに調べてみてください。

$listはハッシュの配列(もっと正確に言えば、「『ハッシュへのリファレンス』を要素にもつリスト」へのリファレンスになります)

> foreach ($list) {
これでは、$listが示すリファレンス一つだけのforeachになります。
$_ == $list となります。

また、Perlでは、インデックスを指定する場合に使うのは、リストには[],ハッシュには{}です。
$_['id'] では、'id'は数値0だと判定され、$_[0]の意味になります。
合せれば、$_['id']は $list[0] にあたり、{ id => '1', name => 'hoge' }(へのリファレンス)になります。
printでは そのことを示す HASH(0xXXXXXX) というような表示になったのでは無いでしょうか。

リファレンスから元の値にするには、デリファレンスと呼ばれる処理が必要です。

foreach (@$list) {
# 配列のリファレンスを@でデリファレンス→リストになり、
#リストの要素であるハッシュのリファレンスが順番に$_へ入る
print $_->{'id'} ;
# ハッシュのリファレンスの中の特定要素へは->を使ってアクセスする。
# ハッシュのインデックスは{}で指定する。

> また「[]、{}」は何を意味するのでしょうか?
$list=[~ では、 []は無名配列、{}は無名ハッシュですが、どちらの記号も他の場面でも使われています。
その文脈で判断する必要があります。


Perlは不慣れ、とのことですが、PHPとは似ているようで結構違います。半端にやらずに、区別して覚えるようにしましょう。
    • good
    • 0
この回答へのお礼

大変分かりやすい回答をいただきありがとうございました。

> Perlは不慣れ、とのことですが、PHPとは似ているようで結構違います。
そうですね、結構違うなっていうのを実感しております。
しっかり勉強しようと思います。

また機会がございましたらよろしくお願いいたします。

お礼日時:2011/07/06 10:34

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