¿Cómo puedo repetir una cadena N veces en Perl?
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?
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:~$