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: