2013-10-08 53 views
0

我只是回到Perl编程,所以我道歉,如果这是一个简单/愚蠢的问题。Perl:如果总是返回true

我的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++; 
} 

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

谢谢!

+3

比较字符串需要字符串比较操作符'eq'像t这'如果($ showName [$计数器]等式$ showName [$计数器+ 1])'' – KeepCalmAndCarryOn

+3

使用警告;'给你答案。 – toolic

+0

总是'严格使用;使用警告;' – ikegami

回答

8

==是数值比较,像'Matt''Gym'所有字符串有数值0,所以他们都==给对方。对于字符串比较,使用eq代替:

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

(我建议启用警告,顺便说一下,加入use warnings;脚本附近开始有了你这样做,你会收到一个有用的消息,警告您您正在对非数字值应用数字相等性测试。)

3

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

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