&foo;

sub foo{
my @l, %h;
print '"'.$h{'ex'}.'"=>';
$h{'ex'} = &bar(1,2,\%h);
print '"'.$h{'ex'}.'"=>';
$h{'ex'} .= &bar(1,2,\%article_replacements);
print '"'.$h{'ex'}.'"';
}

sub bar{
my $a = $_[0], $b = $_[1], %h = %{$_[2]};
return 'A';
}

というプログラムについてなのですが、fooの1行目が
my %h, @l;だと""=>"A"=>"AA"と表示され、
my @l, %h;だと""=>"A"=>""と表示されます。

変数の順番を入れ替えただけで結果が変わってしまうのは
なぜなのでしょうか?
Perlのバージョンはv5.8.8 built for MSWin32-x86-multi-threadです。