Строка сравнения в Perl с "eq" vs "= = " [дубликат]


этот вопрос уже есть ответ здесь:

  • Как сравнить две строки в Perl? 6 ответов

Я (полный новичок Perl) делаю сравнение строк в if о себе:

если я делаю следующее:

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

Я вижу правильный результат (т. е. если условие совпадает, он оценивает "тогда" блок.) Но я вижу эти предупреждения:

аргумент "вкус" не является числовым в числовом эквалайзере ( = = ) в строке номер x.
Аргумент "waste" не является числовым в числовом эквалайзере ( = = ) при номере строки x.

но если я это сделаю:

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

даже если условие if выполнено, оно не оценивает блок "тогда".

здесь $str1 - это taste и $str2 и waste.

как я должен это исправить?

4 70

4 ответа:

первый, eq для сравнения строк; == для сравнения чисел.

даже если условие" если "выполнено, оно не оценивает блок" тогда".

Я думаю, что ваша проблема заключается в том, что ваши переменные не содержат то, что ты думаешь. Я думаю, что ваш $str1 или $str2 содержит что-то вроде "вкус\n" или около того. Проверьте их, напечатав перед вашим если:print "str1='$str1'\n";.

трейлинг новая строка может быть удалена с помощью .

== не числовое сравнение: он преобразует оба аргумента в число, а затем сравнивает их. Пока $str1 и $str2 оба оценивают до 0 как числа, условие будет выполнено.

eq выполняет сравнение строк: два аргумента должны совпадать лексически (с учетом регистра) для выполнения условия.

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

вы пытались жевать $str1 и $str2?

Я нашел аналогичную проблему с использованием (другой) $str1 eq ' Y ' и он ушел только тогда, когда я впервые сделал:

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

работает после этого.

надеюсь, что это поможет.

возможно, условие, которое вы используете, неверно:

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

программа войдет в THEN часть только тогда, когда оба указанных условия.

С $str1 == "taste" || $str2 == "waste". Это позволит выполнить THEN часть если кто-то из вышеперечисленных условий.