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:
- perlrequick – Perl regular expressions quick start (http://perldoc.perl.org/perlrequick.html)
- Perl regular expressions tutorial (http://perldoc.perl.org/perlretut.html)
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.










José Carlos Macoratti
Cezar Taurion
Loiane Groner





