0

我刚刚回到 Perl 编程,所以如果这是一个简单/愚蠢的问题,我表示歉意。

我的 If 语句返回 true(永远不会去 else),我不确定为什么。例如,此代码从不打印“getshere”:

@showName = ("Matt","Matt","Matt","Gym","Gym");

$counter=0;
foreach (@showName)
{
    if ($showName[$counter]==$showName[$counter+1])
    {
        print "$showName[$counter] equ $showName[$counter+1]\n";
    }
    else
    {
        print "getshere";
    }
    $counter++;
}

你能告诉我我做错了什么吗?

谢谢!

4

2 回答 2

8

==是数值比较,和之类的字符串'Matt'都有'Gym'数值0,所以它们都是==相互的。对于字符串比较,请eq改用:

    if ($showName[$counter] eq $showName[$counter+1])

(顺便说一句,我建议通过在use warnings;脚本开头附近添加警告来启用警告。如果你这样做了,你会收到一条有用的消息,警告你正在对非数字值应用数字相等测试。)

于 2013-10-08T01:02:12.990 回答
3

运算符将==字符串转换为数字并进行数字比较。要比较字符串,请使用eq. 要测试字符串是否大于或小于彼此,请使用cmp.

if ($showName[$counter] eq $showName[$counter+1])
于 2013-10-08T01:02:28.980 回答