Si está atascado con la versión anterior a 5.10, las soluciones proporcionadas anteriormente no replicarán completamente la say
función. Por ejemplo
sub say { print @_, "\n"; }
No funcionará con invocaciones como
say for @arr;
o
for (@arr) {
say;
}
... porque la función anterior no actúa sobre el me $_
gusta global implícito print
y la say
función real .
Para replicar más de cerca el perl 5.10+ say
, desea esta función
sub say {
if (@_) { print @_, "\n"; }
else { print $_, "\n"; }
}
Que ahora actúa así
my @arr = qw( alpha beta gamma );
say @arr;
# OUTPUT
# alphabetagamma
#
say for @arr;
# OUTPUT
# alpha
# beta
# gamma
#
La función say
incorporada en perl6 se comporta un poco diferente. Invocándolo consay @arr
o @arr.say
no solo concatenará los elementos de la matriz, sino que los imprimirá separados con el separador de lista. Para replicar esto en perl5 deberías hacer esto
sub say {
if (@_) { print join($", @_) . "\n"; }
else { print $_ . "\n"; }
}
$"
es la variable de separador de lista global, o si está usando English.pm
entonces es es$LIST_SEPARATOR
Ahora actuará más como perl6, así
say @arr;
# OUTPUT
# alpha beta gamma
#