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: