Je suis (un débutant complet en Perl) en train de comparer des chaînes dans une instruction if
:
Si je fais ce qui suit:
if ($str1 == "taste" && $str2 == "waste") { }
Je vois le résultat correct (c'est-à-dire que si la condition correspond, le bloc "then" est évalué). Mais je vois ces avertissements:
L'argument "taste" n'est pas numérique dans l'eq numérique (==) au numéro de ligne x.
L'argument "gaspillage" n'est pas numérique dans l'eq numérique (==) à la ligne numéro x.
Mais si je le fais:
if ($str1 eq "taste" && $str2 eq "waste") { }
Même si la condition if est remplie, le bloc "then" n'est pas évalué.
Ici, $str1
est taste
et $str2
est waste
.
Comment dois-je résoudre ce problème?
Tout d'abord, eq sert à comparer des chaînes; == sert à comparer des nombres.
Même si la condition "si" est remplie, le bloc "alors" n'est pas évalué.
Je pense que votre problème est que vos variables ne contiennent pas ce que vous pensez qu'elles font. Je pense que votre $str1
ou $str2
contient quelque chose comme "goût\n" ou presque. Vérifiez-les en les imprimant avant votre if: print "str1='$str1'\n";
.
Le retour à la ligne final peut être supprimé avec la fonction chomp($str1);
.
==
effectue une comparaison numérique: il convertit les deux arguments en un nombre, puis les compare. Tant que $str1
et $str2
sont tous deux égaux à 0, la condition est remplie.
eq
effectue une comparaison de chaînes: les deux arguments doivent correspondre lexicalement (sensible à la casse) pour que la condition soit satisfaite.
"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.
Avez-vous essayé de modifier le $str1
et $str2
?
J'ai trouvé un problème similaire en utilisant (un autre) $str1
eq 'Y' et il n'est parti que lorsque je l'ai fait pour la première fois:
chomp($str1);
if ($str1 eq 'Y') {
....
}
fonctionne après cela.
J'espère que ça t'as aidé.