というわけで驚きの事実です。この2行は同じhashrefを返します。
my $hoge = [map { id => $_, piyo => "bar" }, @hoge]; my $hoge = [map { {id => $_, piyo => "bar"} } @hoge];
これはmapの後ろの{
はmapの開始地点の意味と、hashrefのコンストラクタとしての意味の{
があります。
通常のmapの使い方だと、{
をそれぞれの意味で解釈できるように2つ置く必要があります。
my $hoge = [map { {id => $_, piyo => "bar"} } @hoge];
これとは逆に{
1つだとmapのhashrefのコンストラクタという意味になり、後ろにLISTが必要となります。
ドキュメントを見るとこうあります。
map BLOCK LIST map EXPR,LIST
というわけでこうかくとhashrefがなんと手に入ります。,
がポイント。
my $hoge = [map { id => $_, piyo => "bar" }, @hoge];
とはいえこの書き方はperltidyがフォーマットしてくれないのでやめたほうが良いでしょう。2引数は渡さないのが良さそう。