電子書籍の厳選無料作品が豊富!

my @shop = [ {'start_hour'=> '1100','shift'=> [1,2] }, {'start_hour'=> '1130','shift'=> [1,3] } ]
という配列があってそれをループで回したいのですが、

▼以下だとNG
foreach my $data (@shop){print $data->{start_hour};}

▼以下だと最初の1つだけOK
foreach my $data (@shop){print $data->[0]->{start_hour};}

という状況です。なぜ$data->{start_hour};で取得できないのでしょうか?
助けて頂けるとうれしいです★

A 回答 (2件)

[] は (無名) 配列へのリファレンスを生成し, リファレンスはスカラです. つまり


my @shop = [ {'start_hour'=> '1100','shift'=> [1,2] }, {'start_hour'=> '1130','shift'=> [1,3] } ];
とすると, @shop は「2個の要素を持つ配列へのリファレンス」という 1個の要素しか持ちません.

やりたいことは, 本当は
my @shop = ( {'start_hour'=> '1100','shift'=> [1,2] }, {'start_hour'=> '1130','shift'=> [1,3] } );
だったりしませんか?
    • good
    • 0

配列に()か[]かの、びみょーな違いです。



my @shop = ( {'start_hour'=> '1100', 'shift'=> [1,2] }, {'start_hour'=> '1130', 'shift'=> [1,3] } );
foreach my $data (@shop) { print $data->{start_hour}; }

または

my $shop = [ {'start_hour'=> '1100', 'shift'=> [1,2] }, {'start_hour'=> '1130', 'shift'=> [1,3] } ];
foreach my $data (@{$shop}) { print $data->{start_hour}; }
    • good
    • 0

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