Operadores para strings: concatenación (.) y repetición (x)

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.

Otras páginas

Perl tutorial

Author

Gabor Szabo (szabgab) Gabor Szabo