Dev (Back & Front)ARTIGO

Expressões regulares em Perl – Parte 03

Leia os artigos anteriores:

Expressões regulares em Perl – Parte 01

Expressões regulares em Perl – Parte 02

*

Continuando a falar sobre expressões regulares em Perl, vou mostrar alguns trechos de códigos interessantes, comentando partes novas e que podem ser de grande utilidade num projeto da vida real, que podem tornar eficientes atividades que sejam repetitivas ou ainda que um script agendado poderia facilmente fazer.

# Abre o arquivo teste.txt para leitura<br />open (ARQUIVO, "</home/usuario/teste.txt");<br /><br />while ($linha = <ARQUIVO>) {<br />    print $linha if ($linha =~ /^Fala1/);<br />}<br /><br /># Fecha a referência para teste.txt<br />close ARQUIVO;

Nesse primeiro esboço, abre-se uma referência para um arquivo no sistema operacional para somente leitura (ser somente leitura é indicado pelo símbolo “<“, caso fosse para escrita, seria o símbolo “>”). Em seguida, é feita uma repetição recuperando cada uma das linhas do arquivo e armazenando o seu conteúdo em $linha.

No corpo da repetição, uma maneira alternativa de se escrever um bloco if, onde a condição vai depois do resultado caso ela seja verdade, que no caso é imprimir a linha caso ela comece com o termo “Fala1”. Ao final, fecha-se a referência para que o recurso seja liberado (se tivesse sido aberto para escrita, o fechamento explícito garante o salvamento dos dados em disco).

O mesmo trecho acima poderia ser reescrito como:

# Abre o arquivo teste.txt para leitura<br />open (ARQUIVO, "</home/usuario/teste.txt");<br /><br />while (<ARQUIVO>) {<br />  print if (/^Fala1/);<br />}<br /><br /># Fecha a referência para teste.txt<br />close ARQUIVO;

Repare que a sintaxe é muito mais enxuta (e esconde muitos mais detalhes) quando se faz uso da variável especial $_ que neste caso está no lugar da variável $linha. Um outro exemplo muito útil é o que segue:

# recupera os pedacos de uma hora<br />$tempo = localtime(time());<br />$tempo =~ /(\d\d):(\d\d):(\d\d)/;<br />$hor = $1;<br />$min = $2;<br />$seg = $3;

Nesse exemplo, o operador () é usado para agrupar pedaços de string que serão colocadas em variáveis separadas, o que chega próximo ao comportamento de uma máscara de dados. Caso o conteúdo da variável $tempo case com a expressão regular no formato informado HH:MM:SS, a linguagem gera automaticamente as variáveis $1, $2 e $3 com os valores casados entre parênteses e que serão usadas como uma variável regular. Outra maneira de escrever o mesmo código acima:

$tempo = localtime(time());<br />($hor, $min, $seg) = ($tempo =~ /(\d\d):(\d\d):(\d\d)/);

Usando o operador de listas (que também são os parênteses), os valores são passados automaticamente para as variáveis de destino, economizando alguns trechos de código que podem tornar o código mais extenso e menos legível.

Esses e muitos outros exemplos podem ser vistos em dois excelentes tutoriais da linguagem Perl sendo usada com expressões regulares:

Eles são em inglês mas possuem uma linguagem fácil e os exemplos falam por si só. Vale muito como um primeiro mergulho no tópico ou mesmo um aprofundamento, pois os últimos tópicos de cada um deles não são triviais.

é mestre em Educação pela Faculdade de Educação da UNICAMP na área de Novas Tecnologias Aplicadas à Educação. Fez graduação em Ciência da Computação também pela UNICAMP e trabalha há quase três anos com a tecnologia Perl, em sistemas de grande porte para empresas de Telecomunicações.

Ver perfil