[Cascavel-pm] Dúvida sobre expressão regular

Nelson C. T. Ferraz nferraz em phperl.com
Quinta Outubro 23 16:08:31 CDT 2003


Luis Campos de Carvalho wrote:
>   Assim, escrever
> 
>   $thing =~ /thing/;
> 
>   ou
> 
>   $thing =~ m,thing,;
> 
>   ou
> 
>   $thing =~ m;thing;;
> 
>   é exatamente a mesma coisa...

Até recentemente eu sempre escrevia as expressões regulares assim:

    $foo =~ /bar/;

Há algumas semanas, quando fui apresentar a palestra sobre Perl na 
UNIFIEO, eu resolvi utilizar a sintaxe "m//", por uma questão de 
didática e mnemônica (m = match, s = substitute):

    $foo =~ m/bar/;

A primeira vantagem que eu percebi, é que esta sintaxe nos faz lembrar 
que este operador tem um nome, é o "operador match". :)

Como o Luis comentou, o operador "m//" permite a utilizacão de 
diferentes delimitadores:

    $foo =~ m/bar/;
    $foo =~ m!bar!;
    $foo =~ m{bar};

Mais do que isso, eu diria que o operador "m//" *incentiva* o uso de 
diferentes delimitadores, da mesma forma como o q// e o qq//. (Nestes 
dois casos, nós estamos tão acostumados a modificar o delimitador que 
nem lembramos qual é o padrão!)

    $string = q/Jon 'Maddog' Orwant/;
    $string = q{Jon 'Maddog' Orwant};
    $string = q(Jon 'Maddog' Orwant);

Por uma questão de consistência e para aumentar a legibilidade do 
código, acabei adotando o "m//" ao invés de "//", principalmente quando 
eu tenho que explicar o código para alguém.

Para concluir, um trecho do Camel Book:

"Although we write m// and s/// here, you'll recall that you can pick 
your own quote characters. On the other hand, for the m// operator only, 
the m may be omitted if the delimiters you pick are in fact slashes. 
(You'll often see patterns written this way, for historical reasons.)"

-- 
[]s

Nelson

________________________________________________________________
Nelson Ferraz

GNU BIS: http://www.gnubis.com.br
PhPerl:  http://www.phperl.com




Mais detalhes sobre a lista de discussão Cascavel-pm