map
является список оператора и основная функция. Это простой синтаксис Perl, который не ожидает запятой после параметра блока для подпрограммы. Особенность map
заключается в том, что она также может принимать форму map EXPR, LIST
. Если бы это использовалось со стандартной подпрограммой, то EXPR
было бы просто оценено и передано как первый параметр.
Параметры блока действительны для всех подпрограмм и могут использоваться, если вы применяете прототипы к определению подпрограммы. Например, вы могли бы определить mymap
, что вел себя точно так же, написав
use strict;
use warnings;
use 5.010;
sub mymap(&@) {
use Data::Dump;
my $sub = shift;
my @newlist;
push @newlist, $sub->($_) for @_;
@newlist;
}
say for mymap { $_ * $_ } 1, 2, 3;
выход
1
4
9
Но в целом вы должны избежать прототипов, если вы не знаете, точно что вы делаем. Как правило, лучший способ написать свой код.
«Почему» в этих ситуациях «Потому что Ларри решил это сделать». :) –