Pregunta

En Python, si hago esto:

print "4" * 4

me sale

> "4444"

En Perl, obtendría

> 16

¿Hay una manera fácil de hacer lo primero en Perl?

¿Fue útil?

Solución

$ perl -e 'print "4"x4; print "\n"'
4444

El operador x está documentado en perldoc perlop . Aquí binario significa un operador que toma dos argumentos, no compuestos de bits, por cierto.

  

Binario '' x '' Es el operador de repetición. En contexto escalar o si el   el operando izquierdo no está encerrado entre paréntesis, devuelve una cadena que consiste   del operando izquierdo repitió el número de veces especificado por el derecho   operando En el contexto de la lista, si el operando izquierdo está encerrado entre paréntesis   o es una lista formada por " qw / STRING / " ;, repite la lista. Si el derecho   el operando es cero o negativo, devuelve una cadena vacía o una vacía   lista, según el contexto.

       print ’-’ x 80;             # Print row of dashes

       print "\t" x ($tab/8), ’ ’ x ($tab%8);      # Tab over

       @ones = (1) x 80;           # A list of 80 1’s
       @ones = (5) x @ones;        # Set all elements to 5

perl -e está destinado a ejecutar código Perl desde la línea de comando:

$ perl --help
Usage: perl [switches] [--] [programfile] [arguments]
  
  -e program     one line of program (several -e's allowed, omit programfile)

Otros consejos

En Perl, desea utilizar la " x " operador.

Tenga en cuenta la diferencia entre

"4" x 4

y

("4") x 4

El primero produce una cadena repetida:

"4444"

este último una lista repetida:

("4", "4", "4", "4")

Es muy similar en Perl

print "4" x 4;

FWIW, también es print 4 x 4 en Perl.

En general, en Perl, los operadores son monomórficos, es decir. tiene diferentes conjuntos de operadores para la semántica de cadenas, para la semántica numérica, para la semántica bit a bit, etc., donde tiene sentido, y el tipo de operandos no importa en gran medida. Cuando aplica un operador numérico a una cadena, la cadena se convierte primero en un número y obtiene la operación que solicitó (por ejemplo, multiplicación), y cuando aplica un operador de cadena a un número, se convierte en una cadena y usted obtenga la operación que solicitó (por ejemplo, repetición). Perl presta atención al operador primero y a los tipos de operandos solo en segundo lugar, si de hecho les importa algo.

Esto es lo opuesto a Python y a la mayoría de los otros lenguajes, donde usa un conjunto de operadores, y los tipos de operandos determinan qué semántica obtendrá realmente, es decir. los operadores son polimórficos.

Todas las respuestas, dadas hasta ahora, no mencionaron que el operador x no solo funciona en literales de cadena sino también en variables de cadena o expresiones que construyen cadenas:

$msg = "hello ";
print $msg x 2;
print ($msg x 2) x 2;

Si desea imprimir 10 caracteres "A", también puede hacerlo

perl -e 'print "A" x 10'; echo

Ejemplo con salida

user@linux:~$ perl -e 'print "A" x 10'; echo
AAAAAAAAAA
user@linux:~$ 
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top