Строка сравнения в 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 ответа:
первый, 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.