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});