Если в Perl оператор потерпел неудачу - PullRequest
0 голосов
/ 25 мая 2011

Здравствуйте, у меня, похоже, проблемы с этим оператором 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 ]

10 голосов
/ 25 мая 2011
   ... 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]
    )
) 
{ ... }
5 голосов
/ 25 мая 2011

Почему бы вам не попробовать:

if (@split_array and $split_array[0] =~ /^(?:cd|set|alias|last)$/)
{
    # ...
}
4 голосов
/ 25 мая 2011
or $split_array[0]))

в самом конце утверждения.Вы не сравниваете это, так что я предполагаю, что это возвращает true для любого слова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...