在Perl比较“eq”和“==”的string

我是(一个完整的Perl新手)做一个if语句中的string比较:

如果我这样做:

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

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

参数“品味”在数字eq(==)在行号x不是数字。
在行号x处,参数“waste”在数字eq(==)中不是数字。

但是,如果我这样做:

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

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

在这里, $str1taste$str2waste

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

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

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

我认为你的问题是你的variables不包含你认为他们做的事情。 我认为你的$str1$str2包含“taste \ n”之类的东西。 检查他们之前print "str1='$str1'\n"; ifprint "str1='$str1'\n";

尾随的换行符可以用chomp($str1);去掉chomp($str1); function。

==进行数字比较:将两个参数转换为数字,然后进行比较。 只要$str1$str2都以数字的forms计算为0,条件就会满足。

eq进行string比较:两个参数必须符合词法(区分大小写)才能满足条件。

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

你尝试chomp $str1$str2

我发现与使用(另一个) $str1 eq“Y”类似的问题,它只在我第一次做:

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

之后的作品。

希望有所帮助。

也许你正在使用的条件是不正确的:

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

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

你可以尝试使用$str1 == "taste" || $str2 == "waste" $str1 == "taste" || $str2 == "waste" 。 如果上述任何条件成立,这将执行THEN部分。