Si está atrapado con pre-5.10 , entonces las soluciones proporcionadas anteriormente no replicarán completamente la función say
. 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 lo implícito mundial $_
como print
y la función real say
.
Para reproducir 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 como esto
my @arr = qw(alpha beta gamma);
say @arr;
# OUTPUT
# alphabetagamma
#
say for @arr;
# OUTPUT
# alpha
# beta
# gamma
#
El say
orden interna en Perl6 se comporta de manera diferente. Invocarlo con say @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 que haría esto
sub say {
if (@_) { print join($", @_) . "\n"; }
else { print $_ . "\n"; }
}
$"
es la variable global separador de lista, o si está usando English.pm
entonces es es $LIST_SEPARATOR
Ahora actuará más como Perl6, al igual que
say @arr;
# OUTPUT
# alpha beta gamma
#
Si su respuesta incluye $ \ asegúrese de que viene con una lista de advertencias sobre el establecimiento de variables globales con efecto invisible. Si bien es muy inteligente y técnicamente responde a la pregunta, también es muy peligroso entregarlo sin reservas a un novato. – Schwern
'perldoc perlvar' describe la mayoría de las advertencias, ¿por qué profundizarlas aquí? –
@David, porque algún hacker aleatorio buscará aquí las respuestas en lugar de perldoc, se sentirá satisfecho con ellas y ¡ni siquiera sabrá sobre las advertencias! –