En Perl, la mayoría de mis print
declaraciones toman la forma
print "hello." . "\n";
¿Existe una buena manera de evitar tener todos los molestos "\ n" por ahí?
Sé que podría crear una nueva función como la myprint
que agrega automáticamente \ n, pero sería bueno si pudiera anular la existente print
.
perldoc perlvar
describe la mayoría de las advertencias, ¿por qué insistir en ellas aquí?Respuestas:
Perl 6 tiene la
say
función que se agrega automáticamente\n
.También puede usar
say
en Perl 5.10 o 5.12 si agregaal comienzo de su programa. O puede usar Modern :: Perl para obtener esta y otras características.
Consulte la función de perldoc para obtener más detalles.
fuente
use 5.012;
ouse 5.010;
conseguirlo si se está ejecutando esos nuevosperl
s.Puede usar la
-l
opción en el encabezado she-bang:Salida:
fuente
perl
opciones, incluido lo que-l
está haciendo, aquí .Si Perl 5.10+ no es una opción, aquí hay una aproximación rápida y sucia. No es exactamente lo mismo, ya que say tiene algo de magia cuando su primer argumento es un identificador, pero para imprimir en STDOUT:
fuente
La forma en que está escribiendo su declaración impresa es innecesariamente detallada. No es necesario separar la nueva línea en su propia cadena. Esto es suficiente.
Esta realización probablemente facilitará la codificación en general.
Además de usar
use feature "say"
ouse 5.10.0
ouse Modern::Perl
para obtener lasay
función incorporada, voy a utilizar perl5i, que activa muchas funciones sensibles de Perl 5 que faltan por defecto.fuente
Tal vez desee cambiar su separador de registros de salida para avanzar de línea con:
local $\ = "\n";
Actualización: mi respuesta habla de capacidad más que de conveniencia. No considero que agregar "\ n" al final de las líneas sea una tarea "molesta", pero si alguien realmente quiere evitarlos, esta es una forma. Si tuviera que mantener un poco de código que usa esta técnica, probablemente lo refactorizaría pronto.
fuente
"helo\r\n"
que ahora envía"helo\r\n\n"
.local $\ = "\n";
-l
es excelente para las líneas de comandos de una sola línea (consulte perldoc.perl.org/perlrun.html#Command-Switches ). No lo recomendaría en ningún programa más grande.Esto es lo que encontré en https://perldoc.perl.org/perlvar.html :
ejemplo:
fuente
En Perl 6 existe, la
say
funciónfuente
Si está atascado con la versión anterior a 5.10, las soluciones proporcionadas anteriormente no replicarán completamente la
say
función. Por ejemploNo funcionará con invocaciones como
o
... porque la función anterior no actúa sobre el me
$_
gusta global implícitoprint
y lasay
función real .Para replicar más de cerca el perl 5.10+
say
, desea esta funciónQue ahora actúa así
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$"
es la variable de separador de lista global, o si está usandoEnglish.pm
entonces es es$LIST_SEPARATOR
Ahora actuará más como perl6, así
fuente