82

我是(一个完整的 Perl 新手)在if语句中进行字符串比较:

如果我执行以下操作:

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

我看到了正确的结果(即如果条件匹配,它会评估“then”块)。但我看到这些警告:

参数“taste”在行号 x 处的数字 eq (==) 中不是数字。
参数“浪费”不是数字 eq (==) 中第 x 行的数字。

但如果我这样做:

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

即使满足 if 条件,它也不会评估“then”块。

在这里,$str1taste$str2waste

我应该如何解决这个问题?

4

4 回答 4

112

首先,eq用于比较字符串;==用于比较数字。

即使满足“if”条件,它也不会评估“then”块。

我认为您的问题是您的变量不包含您认为它们所做的事情。我认为你的$str1or$str2包含“taste\n”之类的东西。通过在if :之前打印来检查它们print "str1='$str1'\n";

可以使用该chomp($str1);功能删除尾随换行符。

于 2012-12-26T21:54:09.233 回答
32

==进行数字比较:它将两个参数都转换为数字,然后将它们进行比较。只要$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.
于 2012-12-26T21:51:21.500 回答
5

你试过咀嚼$str1and$str2吗?

我在使用(另一个)$str1eq 'Y' 时发现了一个类似的问题,并且在我第一次这样做时它才消失:

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

之后工作。

希望有帮助。

于 2014-10-27T09:30:58.700 回答
-6

也许您使用的条件不正确:

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

THEN只有当两个陈述的条件都为真时,程序才会进入部分。

您可以尝试使用$str1 == "taste" || $str2 == "waste". THEN如果上述任何一个条件为真,这将执行该部分。

于 2012-12-27T11:37:36.307 回答