2011-05-24 100 views
0

你好,我似乎有这个if语句的问题。它在逻辑上看起来像是有效的。我想要它做的是看看数组是否被定义,如果它被定义看是否匹配。但是每当我输入一个不匹配的词仍然似乎正在进入if语句。如果语句在Perl中失败

if(@split_array and ($split_array[0] eq "cd" or $split_array[0] eq "set" or $split_array[0] eq "alias" or $split_array[0] eq "last"or $split_array[0]))    
{ 



} 
+3

你猜这最后'或$ split_array [0]'部分被用于测试? – Sean 2011-05-24 20:40:36

+0

最后一个$ split_array [0]是什么?这似乎会导致问题。 – rkg 2011-05-24 20:41:22

+0

这肯定是一个错字,我现在修复它 – 2011-05-24 20:45:54

回答

10
... or $split_array[0] 

这部分意味着,如果你有定义,在$split_array[0]一个值,而不是零或为空,如果你将永远是正确的。

尝试一些格式以便更容易发现错误。就像这样:

if (
    @split_array and 
    (
     $split[0] eq "cd" or 
     $split[0] eq "set" or 
     $split[0] eq "alias" or 
     $split[0] eq "last" or 
     $split[0] 
    ) 
) 
{ ... } 
4
or $split_array[0])) 

在声明的末尾。你没有比较它,所以我猜这对任何单词都是正确的。

+0

谢谢!,我没有注意到。我现在修好了 – 2011-05-24 20:45:28

+0

嗯,这个人首先回答问题,他提出的解决方案工作,OP确认,并且正确的标记转到另一个答案。有趣。 (简单的TLP,这不是攻击) – sidyll 2011-05-24 21:13:51

+0

@sidyll,该检查不是针对* one *正确答案或* first *正确答案,而是针对OP认为是最好的**答案。很多时候,这属于解决当前问题的额外步骤,但提供有关该问题和/或解决方案的信息。在这种情况下,虽然肯德里克有正确的答案,但TLP表明,简单的代码易读性会使问题从一开始就显而易见。 – 2011-05-24 21:35:13

5

你为什么不尝试:

if (@split_array and $split_array[0] =~ /^(?:cd|set|alias|last)$/) 
{ 
    # ... 
}