Что не так с этим блоком if-elsif-else в моем скрипте Perl? - PullRequest
0 голосов
/ 10 сентября 2010

Я пытаюсь написать условие для вложенного оператора if, но не нашел хорошего примера использования операторов if или in.Следующее условие elsif не выполняется и позволяет коду, находящемуся под ним, срабатывать, если $status == 6:

if ($dt1 > $dt2 ) {do one thing}
elsif(($status != 3) || ($status != 6)) { do something else}
else {do something completely different}

Я бы хотел избежать использования другого elsif для каждого условия, поскольку код, который на самом деле находится здесь,несколько строк.

Ответы [ 3 ]

8 голосов
/ 10 сентября 2010

Ваша логика неверна, и ваш блок elseif всегда будет возвращать true. Я думаю, что вы хотите использовать AND вместо OR. Учитывая следующий фрагмент

foreach $status (1 .. 10) {
   if (($status != 3) && ($status != 6)) {
      print "$status => if\n";
   } else {
      print "$status => else\n";
   }
}

Это выдаст

1 => if
2 => if
3 => else
4 => if
5 => if
6 => else
7 => if
8 => if
9 => if
10 => if

Если это помогает вашему мышлению, это условно! ! Что-то еще всегда можно переписать как! (что-то && что-то еще). Если вы примените это к вашему случаю выше, вы скажете! (3 && 6), и, видя, что число не может быть 3 и 6 одновременно, всегда ложно

6 голосов
/ 10 сентября 2010

Вы сказали, что спрашиваете об этом, потому что код состоит из нескольких строк.Исправьте эту проблему.:)

   if( $dt1 > $dt2 )                      { do_this_thing() }
elsif( ($status != 3) || ($status != 6) ) { do_this_other_thing() }
else                                      { do_something_completely_different() }

Теперь у вас нет нескольких строк в блоке и все рядом друг с другом.Вы должны выяснить, какими будут эти условия, потому что любое значение не равно 3 или не равно 6.:)

Возможно, вы намеревались использовать and:

   if( $dt1 > $dt2 )                   { do_this_thing() }
elsif( $status != 3 and $status != 6 ) { do_this_other_thing() }
else                                   { do_something_completely_different() }
1 голос
/ 10 сентября 2010

Помещение print операторов с именами / значениями var в каждую ветвь может быть полезным.
Вы могли видеть, что ветвь elsif всегда выполняется, потому что $status != 3 || $status != 6 верно для любого значения $status.

...