anterior | início | próxima

Perl

característica  como fazer
-------------------------------------------------------
busca           comando m//
substituição    comando s///
divisão         comando split
ER crua         'entre aspas simples'
ignore M/m      modificadores i, (?i)
global          modificador g

(m-i:3) Como resumir o básico sobre ERs do Perl em algumas linhas? Vou tentar. Vamos ver o básico do básico, sem entrar em exceções e sem mostrar as duzentas e sessenta e sete outras maneiras de se fazer a mesma coisa.

Para ignorar a diferença entre maiúsculas e minúsculas, temos o modificador i, ou o metacaractere (?i), e para especificarmos uma ER no formato cru, devemos colocá-la entre 'aspas simples'. Atenção especial aqui, pois o Perl tem a interpretação de strings e a interpretação de /ERs/ também e ambas fazem expansão de variáveis:

Outros modificadores possíveis são o x para poder colocar #comentários no meio da ER e o m do modo multilinha. Esses modificadores também podem ser aplicados apenas em partes da ER com o grupo vazio (?Z), em que Z pode ser uma das seguintes opções: "imsx". Vamos ver um exemplo simples:

$_ = "homer, diga duh";
$curinga = '.*';
if ( m/$curinga ($curinga)/ ) {
  print "$1!\n";
}

s{ $curinga}' $curinga é massa!';
print "$_\n";
print "e o \$1? <$1>\n";

# resultado:
#duh!
#homer, $curinga é massa!
#e o $1? <>

Primeiro gravamos a variável mágica $_ com nosso texto. Depois jogamos nosso super curinga das ERs em outra variável. Na linha seguinte, usamos o comando m//, para casar a ER .* (.*) na variável $_. Opa! Há muita coisa nessa frase. Primeiro, a ER ficou assim, pois como usamos as barras como delimitadoras, então o robozinho fez a interpretação da variável $curinga. Com essa ER, estamos nos aproveitando da gulodice do curinga para guardar no grupo a última palavra da frase.

Mas onde dissemos que era para casar com o texto da variável $_? Não dissemos. Ela é a variável-padrão de comparação. Como a busca deu certo, foi impressa a última palavra. Note que ao usarmos grupos, são gravadas as variáveis $1, $2, etc. para podermos utilizar o conteúdo desses grupos em outras partes do programa.

Em seguida pode não parecer, mas fizemos uma substituição. O comando s/// ficou um pouco desfigurado, pois na primeira parte, onde vai a ER. Precisávamos que a variável $curinga fosse interpretada, então usamos as chaves como delimitador. Na segunda parte, usamos as aspas simples como delimitador, pois não queríamos a interpretação.

Mas só dissemos "troque {isso} por 'aquilo'", onde ele trocou, e para onde foi o resultado? Você se lembra da variável padrão $_? Como não especificamos onde trocar, ela é assumida, e como a substituição regrava o resultado na própria variável do texto original, lá se foi o resultado para o $_.

E o nosso $1? No último print vimos que ele sumiu! Mesmo a substituição não tendo usado grupo algum, a variável foi regravada. Que isso nos sirva de lição: se quiser usar os $1 da vida em outras partes do programa, copie-o para outra variável.

Além de mais de uma dezena de livros sobre Perl que há na O'Reilly, aqui vão algumas páginas:

Está gostando da leitura?
Está aprendendo?
Compre o livro novo que traz mais conteúdo, texto atualizado e ilustrações!
anterior | início | próxima