Em adição aos operadores numéricos o Perl possui dois operadores utilizados especialmente em textos.
Um deles é o .
para concatenação, e o outro é x
para repetições.
use strict;
use warnings;
use 5.010;
my $x = 'Hello';
my $y = 'World';
my $z = $x . ' ' . $y;
say $z;
A execução do código acima gera o seguinte resultado:
Hello World
A função juntou o texto da variável e o elemento literal em um único texto.
Na verdade, no exemplo acima não precisaríamos ter que utilizar o operador .
de concatenação para chegar no resultado. A linguagem fornece a função de interpolação de variáveis em texto, então poderíamos apenas escrever:
my $z = "$x $y";
e isso acabaria dando o mesmo resultado.
Quando a interpolação não é a resposta certa
Obviamente existem casos onde a concatenação não pode ser substituída pela interpolação. Veja o seguinte código como exemplo:
use strict;
use warnings;
use 5.010;
my $x = 2;
my $y = 3;
my $z = 'Take ' . ($x + $y);
say $z;
O resultado será
Take 5
Por outro lado, se substituirmos a concatenação pela interpolação:
my $z = "Take ($x + $y)";
Então nós temos:
Take (2 + 3)
Você deve ter notado que eu também mudei de aspas simples para aspas duplas quando eu quis utilizar a interpolação. Nós discutiremos isso mais a fundo em outro artigo.
Operador de repetição x
O operador x
espera um texto do seu lado esquerdo e um número ao seu lado direito.
Ele retornará o texto do lado esquerdo repetido tantas vezes quanto foi definido pelo valor do lado direito.
use strict;
use warnings;
use 5.010;
my $y = 'Jar ';
my $z = $y x 2;
say $z;
say $y x 2 . 'Binks';
resulta:
Jar Jar
Jar Jar Binks
Eu imagino que este operador seja pouco utilizado, mas pode ser bastante útil nesses raros casos. Por exemplo, quando você quer adicionar uma linha com o mesmo tamanho do seu título:
use strict;
use warnings;
use 5.010;
print "Please type in the title: ";
my $title = <STDIN>;
chomp $title;
say $title;
say '-' x length $title;
Aqui, a linha que imprimimos abaixo do título possui exatamente o mesmo tamanho (em número de caracteres) do título.
$ perl report.pl
Please type in the title: hello
hello
-----
$ perl report.pl
Please type in the title: hello world
hello world
-----------
Utilizando ++ em textos
Apesar de imaginar que o operador de auto incremento (++
) atue somente em números, o Perl possui um uso especial para o operador ++
em textos.
O operador pega o último caractere de um texto e o incrementa em uma unidade, de acordo com a tabela ASCII. Tanto letras de caixa baixa quanto de caixa alta. Se nós incrementarmos um texto que termine com a letra ‘y’, ele irá mudar o caractere para ‘z’. Se o texto terminar em ‘z’, então o incremento irá mudá-lo para a letra ‘a’, mas nesse caso a letra à esquerda irá mudar também
use strict;
use warnings;
use 5.010;
my $x = "ay";
say $x;
$x++;
say $x;
$x++;
say $x;
$x++;
say $x;
$x--;
say $x;
O resultado é:
ay
az
ba
bb
-1
Como você pode ver, o operador --
não funciona em textos.