Perl中的字符串比较与“eq”vs“==”

时间:2012-12-26 21:48:56

标签: string perl

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

如果我这样做:

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

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

  

参数“taste”在行号x的数字eq(==)中不是数字。
  参数“waste”在行号x的数字eq(==)中不是数字。

但如果我这样做:

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

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

此处$str1taste$str2waste

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:101)

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

  

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

我认为您的问题是您的变量不包含您认为他们所做的事情。我认为您的$str1$str2包含类似“品味\ n”的内容。请在如果print "str1='$str1'\n";之前通过打印进行检查。

可以使用chomp($str1);函数删除尾随换行符。

答案 1 :(得分:27)

==进行数值比较:它将两个参数都转换为数字然后进行比较。只要$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.

答案 2 :(得分:5)

您是否试图选择$str1$str2

我发现了使用(另一个)$str1 eq'Y'的类似问题,它在我第一次出现时就消失了:

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

之后工作。

希望有所帮助。

答案 3 :(得分:-5)

您使用的条件可能不正确:

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

只有当两个条件都成立时,程序才会进入THEN部分。

您可以尝试使用$str1 == "taste" || $str2 == "waste"。如果满足上述任何条件,则执行THEN部分。