if文で複数の条件式を順に評価する(if..elsif..else)

if 文では条件式を複数記述し、最初の条件式が偽だった場合に別の条件式を評価して処理を分けることができます。ここでは Perl で if..elsif..else 文を使って複数の条件式を順に評価して処理を分ける方法について解説します。

(Last modified: )

if文で複数の条件式を順に評価する

if 文では単独の条件分岐だけではなく複数の条件分岐を使って処理を分けることができます。 if .. elsif .. else 文を使用します。書式は次の通りです。

if (条件式1) {
    条件式1が真の時に実行する処理;
}elsif (条件式2) {
    条件式1が偽で条件式2が真の時に実行する処理;
}elsif (条件式3) {
    条件式1及び条件式2が偽で条件式3が真の時に実行する処理;
}else{
    すべての条件式が偽の時に実行する処理;
}

最初の条件式は今までの if 文と同じです。条件式が真の場合には次に記述されたブロック内の処理を行いそして if 文を終了します。そして条件式が偽の場合だけ次の elsif へ進み、記述された条件式を評価します。評価した結果が真であればその次に記述されたブロック内の処理を行い if 文を終了します、偽であった場合は次の elsif へ進みます。上から順に評価されていくことに注意して下さい。

elsif は必要な数だけ記述することができます。またすべての条件式が偽だった場合に実行する処理として else の次のブロック内に処理を記述できます。 else の部分は必要無ければ省略できます。

※else if ではなく elsif ですので注意して下さい

例えば変数に格納された値が正の数か負の数か、または 0 かで処理を分ける場合には次のように記述します。

my $num;

$num = 5;

if ($num > 0){
  print "正の数です";
}elsif ($num < 0){
  print "負の数です";
}elsif ($num == 0){
  print "0です";
}else{
  print "その他の値です";
}

この場合、変数の値が正の数だった場合は "正の数です" と表示され、負の数だった場合は "負の数です" と表示され、 0 と等しい場合は "0です" と表示されます。いずれの条件式でも真とならなかった場合は "その他の値です" と表示されます。

サンプルコード

それでは簡単なサンプルを作成します。

use strict;
use warnings;
use utf8;
binmode STDIN, ':encoding(cp932)';
binmode STDOUT, ':encoding(cp932)';
binmode STDERR, ':encoding(cp932)';

my $num;

$num = 18;

print "数値 = $num\n";
if ($num >= 20){
  print "20以上です\n";
}elsif ($num >= 10){
  print "10以上20未満です\n";
}else{
  print "10未満です\n";
}

$num = 8;

print "数値 = $num\n";
if ($num >= 20){
  print "20以上です\n";
}elsif ($num >= 10){
  print "10以上20未満です\n";
}else{
  print "10未満です\n";
}

テキストエディタでプログラムを記述したあと sample.pl という名前で保存します。(文字コードは UTF-8 です)。コマンドプロンプトを起動し、プログラムを保存したディレクトリへ移動したあとで次のように実行します。

perl sample.pl

次のように実行結果が表示されます。

if文で複数の条件式を順に評価する(if..elsif..else)(1)

if..elsif..else 文を使って複数の条件式を評価して処理を分けるようにしました。

-- --

Perl で if..elsif..else 文を使って複数の条件式を順に評価して処理を分ける方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。