Operadores para strings: concatenación (.) y repetición (x)
Además de los operadores numéricos, Perl tiene dos operadores pensados especialmente para cadenas de texto. Uno de ellos es . para concatenar, el otro es x (x minúscula) para repetición.
use strict; use warnings; use 5.010; my $x = 'Hola'; my $y = 'Mundo'; my $z = $x . ' ' . $y; say $z;
Ejecutando el código anterior obtendrás:
Hola Mundo
El operador . simplemente concatena el texto de las dos variables y el espacio creando un nuevo string.
En el caso anterior no necesitamos usar la concatenación con ., usando la interpolación de variables escalares dentro de strings podemos escribir:
my $z = "$x $y";
y obtendríamos el mismo resultado.
Cuando la interpolación no funciona
Hay muchos casos donde la concatenación no se puede remplazar con interpolación. Por ejemplo:
use strict; use warnings; use 5.010; my $x = 2; my $y = 3; my $z = '2 + 3 da ' . ($x + $y); say $z;
Mostrará:
2 + 3 da 5
Por otro lado, si usamos interpolación en lugar de concatenación:
my $z = "2 + 3 da ($x + $y)";
Obtendremos:
2 + 3 da (2 + 3)
x, el operador de repetición
El operador x espera un string como operador en el lado izquierdo y un número en el lado derecho. Devolverá el texto del lado izquierdo repetido tantas veces como indica el valor del lado derecho.
use strict; use warnings; use 5.010; my $y = 'Jar '; my $z = $y x 2; say $z; say $y x 2 . 'Binks';
devuelve:
Jar Jar Jar Jar Binks
Este operador no se usa a menudo, pero puede ser útil en algunos casos. Por ejemplo, si quieres añadir una línea del mismo tamaño que el título de un informe:
use strict; use warnings; use 5.010; print "Por favor introduce el titulo: "; my $title = <STDIN>; chomp $title; say $title; say '-' x length $title;
Aquí la línea mostrada bajo el título es exactamente del mismo tamaño (en número de caracteres) que el título.
$ perl informe.pl Por favor introduce el titulo: hola hola ----- $ perl informe.pl Por favor introduce el titulo: hola mundo hola mundo -----------
++ en un string
Aunque se podría esperar que el operador de auto-incremento (++) funcionase solo con números, también funciona con strings en Perl.
Si Perl encuentra un string en lugar de un número seleccionará el último carácter y lo incrementa usando la las letras minúsculas y mayúsculas de la tabla ASCII. Si un string termina con la letra 'y' y la incrementamos cambiará a 'z'. Si termina con 'z' y la incrementamos de nuevo cambiará a la letra 'a' y el carácter a su izquierda será incrementado también.
use strict; use warnings; use 5.010; my $x = "ay"; say $x; $x++; say $x; $x++; say $x; $x++; say $x; $x--; say $x;
El resultado será:
ay az ba bb -1
Como puedes ver, el operador -- no funciona con strings.
Published on 2015-04-06