0

ネストされた if ステートメントの条件を記述しようとしていますが、if ステートメントで or を使用する良い例が見つかりません。次のelsif条件は失敗し、その下にネストされたコードが次の場合に起動され$status == 6ます。

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

ここに実際に存在するコードは数行の長さであるため、条件ごとに別の elsif を使用することは避けたいと思います。

4

3 に答える 3

8

あなたのロジックは間違っており、elseif ブロックは常に true を返します。OR の代わりに AND を使用するつもりだと思います。次のスニペットを考えると

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

それがあなたの思考に役立つなら、!something || という条件式。!somethingElse は常に !(something && somethingElse) として書き換えることができます。これを上記のケースに適用すると、!(3 && 6) と言うことができます。数値を同時に 3 と 6 にすることはできず、常に false になります。

于 2010-09-10T09:54:40.733 に答える
6

コードが数行の長さであるため、これを求めているとのことでした。その問題を修正してください。:)

   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() }
于 2010-09-10T10:14:20.637 に答える
1

varprintの名前/値を含むステートメントを各ブランチに配置すると役立つ場合があります。の任意の値に対して が真であるため、分岐が常に実行さ
れていることがわかります。elsif$status != 3 || $status != 6$status

于 2010-09-10T09:40:02.057 に答える