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.