string - lenguaje - Comparación de cuerdas en Perl con "eq" vs "=="
lenguaje perl ejemplos (4)
¿Intentó $str1
y $str2
?
Encontré un problema similar con el uso de (otro) $str1
eq ''Y'' y solo desapareció cuando lo hice por primera vez:
chomp($str1);
if ($str1 eq ''Y'') {
....
}
funciona después de eso.
Espero que ayude.
Esta pregunta ya tiene una respuesta aquí:
- ¿Cómo comparo dos cadenas en Perl? 6 respuestas
Soy (un completo novato de Perl) haciendo una comparación de cadenas en una declaración if
:
Si hago lo siguiente:
if ($str1 == "taste" && $str2 == "waste") { }
Veo el resultado correcto (es decir, si la condición coincide, evalúa el bloque "luego"). Pero veo estas advertencias:
El "gusto" del argumento no es numérico en la ecuación numérica (==) en el número de línea x.
Argumento "desperdicio" no es numérico en la ecuación numérica (==) en el número de línea x.
Pero si lo hago:
if ($str1 eq "taste" && $str2 eq "waste") { }
Incluso si se cumple la condición if, no evalúa el bloque "then".
Aquí, $str1
es taste
y $str2
es waste
.
¿Cómo debo solucionar esto?
Primero, eq es para comparar cadenas; == es para comparar números.
Incluso si se cumple la condición "si", no evalúa el bloque "entonces".
Creo que tu problema es que tus variables no contienen lo que crees que hacen. Creo que su $str1
o $str2
contiene algo así como "sabor / n" más o menos. Compruébelos imprimiendo antes de su si : print "str1=''$str1''/n";
.
La nueva línea final se puede eliminar con chomp($str1);
función.
Tal vez la condición que estás usando sea incorrecta:
$str1 == "taste" && $str2 == "waste"
El programa entrará en la parte THEN
solamente cuando las dos condiciones establecidas sean verdaderas.
Puedes probar con $str1 == "taste" || $str2 == "waste"
$str1 == "taste" || $str2 == "waste"
. Esto ejecutará la parte THEN
si cualquiera de las condiciones anteriores es verdadera.
==
hace una comparación numérica: convierte ambos argumentos en un número y luego los compara. Siempre que $str1
y $str2
evalúen a 0 como números, se cumplirá la condición.
eq
hace una comparación de cadenas: los dos argumentos deben coincidir léxicamente (distingue entre mayúsculas y minúsculas) para que se cumpla la condición.
"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.