mapの引数の取り方にアレされました
mapにリストをつくってもらっていて、
#!/usr/bin/env perl use Data::Dumper; $li = [ map { +{ AMPM => 'AM', time => sprintf('%02d:00:00', $_) } } 0..2, map { +{ AMPM => 'PM', time => sprintf('%02d:00:00', $_) } } 0..2, ]; print Dumper($li);
下記のような値を期待していた
[ { 'AMPM' => 'AM', 'time' => '00:00:00' }, { 'AMPM' => 'AM', 'time' => '01:00:00' }, { 'AMPM' => 'AM', 'time' => '02:00:00' }, { 'AMPM' => 'PM', 'time' => '00:00:00' }, { 'AMPM' => 'PM', 'time' => '01:00:00' }, { 'AMPM' => 'PM', 'time' => '02:00:00' }, ];
実際は下記のような値になる
[ { 'AMPM' => 'AM', 'time' => '00:00:00' }, { 'AMPM' => 'AM', 'time' => '01:00:00' }, { 'AMPM' => 'AM', 'time' => '02:00:00' }, { 'AMPM' => 'AM', 'time' => '140317135233208:00:00' # <-謎の日時 }, { 'AMPM' => 'AM', 'time' => '140317135378656:00:00' }, { 'AMPM' => 'AM', 'time' => '140317135378944:00:00' }, ];
理由は 一つ目のmapが、二つ目のmapの結果も引数にとってしまうため。
下記のようなイメージに
map {code} (0, 1, 2, +{hash}, +{hash}, +{hash});