String compare em Perl com “eq” vs “==”

Eu sou (um novato Perl completo) fazendo comparação de strings em uma instrução if :

Se eu fizer o seguinte:

 if ($str1 == "taste" && $str2 == "waste") { } 

Eu vejo o resultado correto (ou seja, se a condição corresponder, ele avalia o bloco “then”). Mas eu vejo esses avisos:

O argumento “gosto” não é numérico no eq numérico (==) no número da linha x.
O argumento “desperdício” não é numérico no eq numérico (==) na linha número x.

Mas se eu fizer:

 if ($str1 eq "taste" && $str2 eq "waste") { } 

Mesmo se a condição if for satisfeita, ela não avalia o bloco “then”.

Aqui, $str1 é taste e $str2 é um waste .

Como devo consertar isso?

Primeiro, eq é para comparar strings; == é para comparar números.

Mesmo se a condição “if” for satisfeita, ela não avaliará o bloco “then”.

Eu acho que seu problema é que suas variables ​​não contêm o que você acha que elas fazem. Eu acho que seu $str1 ou $str2 contém algo como “gosto \ n” ou algo assim. Verifique-os imprimindo antes do seu if : print "str1='$str1'\n"; .

A nova linha final pode ser removida com o chomp($str1); function.

== faz uma comparação numérica: converte os dois argumentos em um número e os compara. Contanto que $str1 e $str2 sejam avaliados como 0 como números, a condição será satisfeita.

eq faz uma comparação de string: os dois argumentos devem corresponder lexicalmente (sensível a maiúsculas e minúsculas) para que a condição seja satisfeita.

 "foo" == "bar"; # True, both strings evaluate to 0. "foo" eq "bar"; # False, the strings are not equivalent. "Foo" eq "foo"; # False, the F characters are different cases. "foo" eq "foo"; # True, both strings match exactly. 

Você tentou chomp the $str1 e $str2 ?

Eu encontrei um problema semelhante com o uso de (outro) $str1 eq ‘Y’ e só foi embora quando fiz pela primeira vez:

 chomp($str1); if ($str1 eq 'Y') { .... } 

funciona depois disso.

Espero que ajude.

Talvez a condição que você está usando esteja incorreta:

 $str1 == "taste" && $str2 == "waste" 

O programa entrará na parte THEN somente quando ambas as condições declaradas forem verdadeiras.

Você pode tentar com $str1 == "taste" || $str2 == "waste" $str1 == "taste" || $str2 == "waste" . Isso executará a parte THEN se qualquer uma das condições acima for verdadeira.