Сравнение строк в Perl с "eq" vs "=="
Я (полный новичок в Perl), выполняющий сравнение строк в инструкции if
:
Если я делаю следующее:
if ($str1 == "taste" && $str2 == "waste") { }
Я вижу правильный результат (т.е. если условие соответствует, оно вычисляет блок "then" ). Но я вижу эти предупреждения:
Аргумент "вкус" не является числовым в числовом eq (==) при номере строки x.
Аргумент" Отходы" не является числовым в числовом eq (==) при номере строки x.
Но если я это сделаю:
if ($str1 eq "taste" && $str2 eq "waste") { }
Даже если условие if выполнено, оно не оценивает блок "then".
Здесь $str1
есть taste
, а $str2
- waste
.
Как мне исправить это?
Ответы
Ответ 1
Во-первых, eq предназначен для сравнения строк; == предназначен для сравнения чисел.
Даже если условие "if" выполнено, оно не оценивает блок "then".
Я думаю, ваша проблема в том, что ваши переменные не содержат того, что вы думаете, что они делают. Я думаю, что ваш $str1
или $str2
содержит что-то вроде "taste\n" или так. Проверьте их, выполнив печать до , если: print "str1='$str1'\n";
.
Возвращаемая новая строка может быть удалена с помощью функции chomp($str1);
.
Ответ 2
==
выполняет числовое сравнение: оно преобразует оба аргумента в число и затем сравнивает их. Пока $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.
Ответ 3
Вы пытались выполнить chomp $str1
и $str2
?
Я нашел аналогичную проблему с использованием (другой) $str1
eq 'Y', и она только ушла, когда я впервые сделал:
chomp($str1);
if ($str1 eq 'Y') {
....
}
работает после этого.
Надеюсь, что это поможет.
Ответ 4
Возможно, неправильное условие:
$str1 == "taste" && $str2 == "waste"
Программа войдет в часть THEN
только в том случае, если оба указанных условия верны.
Вы можете попробовать с помощью $str1 == "taste" || $str2 == "waste"
. Это выполнит часть THEN
, если любое из вышеуказанных условий истинно.