[SP-pm] Dúvida sobre comparação de Strings ( =~ ou eq )

"Flávio R. Lopes" flavio.lopes at links.inf.br
Sat May 29 09:27:37 PDT 2010


Em 29-05-2010 12:43, Luis Motta Campos escreveu:
> On 05/29/2010 04:51 PM, "Flávio R. Lopes" wrote:
> [snip]
>    
>> Enfim minha dúvida:
>> Porque que não dá certo usar:
>> if ( ( $escolha eq /exit/i ) || ( $escolha eq /quit/i ) )
>>
>> O operador de comparação "eq" não é para comparar strings? Porque então
>> o programa não foi encerrado?
>>
>> Só deu certo depois que mudei o código para (usando o Binding Operator):
>>      if ( ( $escolha =~ /exit/i ) || ( $escolha =~ /quit/i ) ) {
>>          last;
>>      }
>>
>> Alguém poderia me ajudar a entender a diferença deles?
>>      
> Ah... uma coisa é uma coisa, outra coisa é outra coisa.
>
> Se você quer comparar strings, use "eq", o Operador de Comparação de
> Strings.
>
> Expressões Regulares não são a mesma coisa que comparar strings.
> Expressões Regulares descrevem uma Gramática Regular
> (http://pt.wikipedia.org/wiki/Gram%C3%A1tica_regular) que pode até mesmo
> ser usada como forma de comparar strings, mas é muito mais poderosa do
> que isso.
>
> Você não pode passar uma Gramática Regular para um Operador de
> Comparação de Strings. O que o Interpretador Perl entende quando você
> escreve "$string eq /pattern/" é "compare a representação textual
> (string) do resultado da resolução da Expressão Regular /pattern/ contra
> o valor padrão $_".
>
> Upa. Acho que isso já deve chegar para você entender que ainda não sabe
> como as Expressões Regulares funcionam em Perl. Também deve chegar para
> você entender que uma Expressão Regular não é uma Comparação de String -
> tem muito mais coisas acontecendo alí do que as aparências revelam.
>    
Luis, obrigado pela ajuda.
Bom...a grosso modo, quando se tratar de regex, para fazer esta 
comparação sempre devo usar "=~"
E quando for pura e simplesmente strings aí sim eu uso "eq"
É mais ou menos isso?

> Espero que isso ajude você.
>
> Se você quiser saber mais sobre Expressões Regulares, eu recomendo a
> leitura do livro "Mastering Regular Expressions" do Jeffrey E. F. Friedl
> (http://oreilly.com/catalog/9781565922570).
>    
Obrigado pela sugestão. Vou comprar sim.
> Putamplexos.
>    
Abraço,
Flávio


More information about the SaoPaulo-pm mailing list