如果语句在Perl中失败

时间:2011-05-24 20:36:49

标签: perl if-statement

您好我的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]))               
{



}

3 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:5)

你为什么不试试:

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

答案 2 :(得分:4)

or $split_array[0]))

在声明的最后。你不是在比较它,所以我猜测任何单词都会返回。