我是(一个完整的Perl新手)在if
语句中进行字符串比较:
如果我这样做:
if ($str1 == "taste" && $str2 == "waste") { }
我看到了正确的结果(即如果条件匹配,则评估“then”块)。但是我看到了这些警告:
参数“taste”在行号x的数字eq(==)中不是数字。
参数“waste”在行号x的数字eq(==)中不是数字。
但如果我这样做:
if ($str1 eq "taste" && $str2 eq "waste") { }
即使满足if条件,它也不会评估“then”块。
此处$str1
为taste
,$str2
为waste
。
我该如何解决这个问题?
答案 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
部分。