Perl:如果总是返回true

时间:2013-10-08 00:58:40

标签: perl if-statement

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

我的If语句返回true(永远不会去其他地方),我不确定为什么。例如,此代码从不打印“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++;
}

你能告诉我我做错了吗?

谢谢!

2 个答案:

答案 0 :(得分:8)

==是数字比较,'Matt''Gym'等字符串都具有数值0,所以它们彼此都是== 。对于字符串比较,请改用eq

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

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

答案 1 :(得分:3)

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

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