您好我的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]))
{
}
答案 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]))
在声明的最后。你不是在比较它,所以我猜测任何单词都会返回。