Se você estiver preso ao pré-5.10, as soluções fornecidas acima não replicarão totalmente a say
função. Por exemplo
sub say { print @_, "\n"; }
Não funcionará com invocações como
say for @arr;
ou
for (@arr) {
say;
}
... porque a função acima não atua na função global implícita $_
like print
e real say
.
Para replicar mais de perto o perl 5.10+ say
você quer esta função
sub say {
if (@_) { print @_, "\n"; }
else { print $_, "\n"; }
}
Que agora age assim
my @arr = qw( alpha beta gamma );
say @arr;
# OUTPUT
# alphabetagamma
#
say for @arr;
# OUTPUT
# alpha
# beta
# gamma
#
O say
integrado em perl6 se comporta de maneira um pouco diferente. Invocá-lo com say @arr
ou @arr.say
não apenas concatenará os itens do array, mas os imprimirá separados pelo separador de lista. Para replicar isso em perl5 você faria isso
sub say {
if (@_) { print join($", @_) . "\n"; }
else { print $_ . "\n"; }
}
$"
é a variável separadora de lista global ou, se você estiver usando English.pm
, é é$LIST_SEPARATOR
Agora vai agir mais como perl6,
say @arr;
# OUTPUT
# alpha beta gamma
#