如果语句在Perl中失败

Ste*_*ris 0 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]))               
{



}
Run Code Online (Sandbox Code Playgroud)

TLP*_*TLP 10

   ... or $split_array[0]
Run Code Online (Sandbox Code Playgroud)

这部分意味着如果你$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]
    )
) 
{ ... }
Run Code Online (Sandbox Code Playgroud)


sid*_*yll 5

你为什么不试试:

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