If语句在Perl中失败

If语句在Perl中失败,perl,Perl,我似乎对这个if语句有问题。从逻辑上看,这似乎是可行的。我想看看数组是否已定义。如果已定义,请查看单词是否匹配。但每当我输入一个不匹配的单词时,它似乎仍然在输入if语句 if(@split_array and ($split_array[0] eq "cd" or $split_array[0] eq "set" or $split_array[0] eq "alias" or $split_ar

我似乎对这个if语句有问题。从逻辑上看,这似乎是可行的。我想看看数组是否已定义。如果已定义,请查看单词是否匹配。但每当我输入一个不匹配的单词时,它似乎仍然在输入if语句

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])
   )
{

}
在声明的最后。你不是在比较,所以我猜这对任何单词来说都是真的

   ... or $split_array[0]
这部分意味着,如果在
$split_array[0]
中定义了一个值,且该值不是零或空,则if将始终为真

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

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]
    )
) 
{ ... }
尝试:


您认为最后一个
或$split\u array[0]
部件测试的目的是什么?最后一个
$split\u array[0]
的目的是什么?这似乎是问题的原因。那一定是打字错误,我现在已经修好了。谢谢!,我没有注意到。我现在已经修好了嗯,那家伙先回答问题,他提出的解决方案成功了,OP确认了,正确的分数转到了另一个答案。有趣的(别紧张,TLP,这不是攻击)@sidyll,检查的不是一个正确答案,也不是第一个正确答案,而是OP认为最好的答案。通常情况下,这属于一个答案,它不仅要解决当前问题,还要提供有关该问题和/或解决方案的信息。在本例中,虽然肯德里克给出了正确的答案,但TLP从一开始就说明了简单的代码易读性将使问题变得显而易见。@Ven'Tatsu我完全理解。问题是,5分钟后,这个答案被发布,OP在评论中说它有效。在这一点上,这个答案和另一个答案基本上是相同的(除了这一个是先前发布的)。然后,20分钟后(问题已经解决后),TLP编辑了他的答案以显示格式化技巧。时间现在不是那么精确,但在那一刻我只是想知道为什么“谢谢,问题解决了”并没有标记为正确。不管怎样,那只是一个评论,我不是攻击任何人,只是想表明时间应该被考虑。@sidyll我怀疑OP把我们的答案弄混了。我完全预料到这场比赛会“输”,因为肯德里克以4分钟的优势击败了我。我添加了格式,因为我认为这样可以避免长条件的问题。
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]
    )
) 
{ ... }
if (@split_array and $split_array[0] =~ /^(?:cd|set|alias|last)$/)
{
    # ...
}