Когда блок map должен вернуть ссылку на анонимный хеш и этот блок содержит более чем одну логическую строку, то необходимо подсказать, что фигурные скобки являются обозначением анонимного хеша, а не блока лексической области видимости. В качестве подсказки могут выступать круглые скобки, в которые обрамляется анонимный хеш.
Примеры.
Простой блок - perl понимает сам, что имеет дело с анонимным хешем:
> perl -MData::Dumper -e 'print Dumper [map { { 1 .. 4 } } (1 .. 2)]' $VAR1 = [ { '1' => 2, '3' => 4 }, { '1' => 2, '3' => 4 } ];
Сложный блок - perl думает, что имеет дело с лексической областью видимости:
> perl -MData::Dumper -e 'print Dumper [map { 1; { 1 .. 4 } } (1 .. 2)]' $VAR1 = [ 1, 2, 3, 4, 1, 2, 3, 4 ];
Подсказка про анонимный хеш при помощи круглых скобок:
> perl -MData::Dumper -e 'print Dumper [map { 1; ({ 1 .. 4 }) } (1 .. 2)]' $VAR1 = [ { '1' => 2, '3' => 4 }, { '1' => 2, '3' => 4 } ];
Кстати, когда анонимный хеш возвращается из обычной подпрограммы при помощи return, то нет нужды в подсказке в виде круглых скобок, так как return устраняет вышеописанную неопределенность. А вот если return отсутствует и подпрограмма возвращает последние вычисленное значение, то подсказка необходима. В блоке map return использовать нельзя.
http://laziness-impatience-hubris.blogspot.com/2008/05/map.html

unary "+"
% perl -MData::Dumper -e 'print Dumper [map { 1; +{ 1 .. 4 } } (1 .. 2)]'Спасибо. Об
Спасибо. Об этом способе и не знал.