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

Luis Motta Campos luismottacampos at yahoo.co.uk
Sat May 29 08:43:00 PDT 2010


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.

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).

Putamplexos.
-- 
Luis Motta Campos is a DBA,
Perl Programmer, foodie and photographer.


More information about the SaoPaulo-pm mailing list