Nesta parte do Tutorial Perl nós iremos aprender sobre algumas das funções que o Perl possui para manipular textos.

lc, uc, length

No Perl podemos encontrar uma série de funções tais como lc e uc que retornam respectivamente versões em caixa baixa e caixa alta dos textos originais. Há também length que retorna o número de caracteres de um dado texto.

Veja os exemplos abaixo:

use strict;
use warnings;
use 5.010;

my $str = "tEXtO";

say lc $str;      # texto
say uc $str;      # TEXTO
say length $str;  # 5

index

Há também a função index. Esta função recebe dois textos e retorna a posição do segundo texto dentro do primeiro.

use strict;
use warnings;
use 5.010;

my $str = "O gato preto pulou da árvore verde";

say index $str, 'gato';            # 2
say index $str, 'cachorro';        # -1
say index $str, "O";               # 0
say index $str, "o";               # 5
say index $str, "árvore";          # 22

A primeira chamada à função index retornou 2, porque o texto 'gato' inicia no segundo caractere. A segunda chamada à função index retornou -1 indicando que não existe a palavra 'cachorro' no texto.

A terceira chamada demonstra que a função retorna 0 quando o segundo texto é prefixo do primeiro texto.

É importante ressaltar também que a caixa do texto faz diferença para a função.

index() procura também por textos e não apenas palavras, isso significa que até mesmo o texto 'e' pode ser procurado:

say index $str, "e";              # 9

A função index também pode possuir um terceiro parâmetro que indica a posição onde busca deve iniciar. Como vimos no caso do texto 'e' que inicia no nono caractere do primeiro texto, nós podemos tentar iniciar a busca a partir do vigésimo sétimo caractere para ver se há mais alguma ocorrência do 'e'.

say index $str, "e";               # 9
say index $str, "e ", 27;          # 28

Buscando por 'e' sem o espaço resultará em um valor diferente.

Finalmente há ainda uma outra função chamada rindex, conhecido como índice direito (right index), que irá começar a busca pelo lado direito do texto:

say rindex $str, "e";              # 34
say rindex $str, "e", 30;          # 28

substr

Eu acho que a função mais interessante neste artigo é a substr. Ela atua basicamente de forma oposta ao index(). Enquanto que o index() irá lhe dizer aonde está um determinado texto, substr irá lhe retornar uma parte do texto em uma determinada posição. Normalmente a função substr recebe três parâmetros, o primeiro é o texto, o segundo é a posição de início (também conhecida como offset) e o terceiro é o tamanho da parte ou fragmento do texto que deseja recuperar.

use strict;
use warnings;
use 5.010;

my $str = "O gato preto subiu na árvore verde";

say substr $str, 7, 5;                      # preto

A substr() inicia pela posição 0, portanto o caractere no offset 7 é a letra p.

say substr $str, 2, -12;                    # gato preto subiu na

O terceiro parâmetro (o tamanho) pode também ser um valor negativo. Neste caso ele nos retorna o número de caracteres a partir do lado direito do texto original que NÃO deverá ser incluído. Ou seja, conte 2 a partir da esquerda, 11 a partir da direita e retorne o que há no meio.

say substr $str, 13;                        # subiu na árvore verde

Você pode também ignorar o terceiro parâmetro, que significa: retorne todos os caracteres iniciando na quarta posição e seguindo até o final do texto.

say substr $str, -5;                        # verde
say substr $str, -5, 2;                     # ve

Nós podemos também utilizar um número negativo no offset, o que significa: Contar cinco a partir da direita e iniciar a partir dessa posição. É o equivalente a ter length($str)-4 no offset.

Substituindo parte de um texto

O último exemplo é um pouco mais estiloso. Até o momento, em todos os casos substr retornou uma parte do texto e deixou o texto original intacto. Neste exemplo, o valor de retorno da função continuará sendo o mesmo, porém a função substr também irá alterar o conteúdo do texto original!

O valor de retorno da substr é sempre determinado pelos três primeiros parâmetros, mas neste caso a função possuirá um quarto parâmetro. Esse novo elemento será um texto que irá substituir a região selecionada do texto original.

my $z = substr $str, 13, 5, "pulou";
say $z;                                                     # subiu
say $str;                  # O gato preto pulou na árvore verde

Portanto substr $str, 13, 5, "pulou na" retorna a palavra subiu, mas por causa do quarto parâmetro, o texto original foi alterado.