条件によって違うことをしたい場合には、if文という条件文を用います。
if文は以下の形をしています。
if ( 条件式 ){ ブロック1 } else { ブロック2 };ここで条件式は「条件判断をするための式」です。ブロック部分をインデントして
if ( 条件式 ){ ブロック1 } else { ブロック2 };と書いたほうがわかりやすいです。
プログラムの流れとしては、条件式が
- 正しい(真)ときにはブロック1
- 正しくない(偽)ときにはブロック2
が実行されます。
また、偽の場合に実行すべきものがない場合には、「 else { ブロック2 } 」の部分を省略することができます。
条件式には、等式や不等式に代表される真または偽の値(真理値)を持つ式を記述することができます。
- 数値データの比較演算子(<、>、<=、>=、==、!=)
- < より小さい $x < 4
- > より大きい $x > 4
- <= 以下 $x <= 4
- >= 以上 $x >= 4
- == 等しい $x == 4
- != 等しくない $x != 4
- 文字列の比較演算子(辞書順に比較)
- lt より小さい $x lt "a"
- gt より大きい $x gt "a"
- le 以下 $x le "a"
- ge 以上 $x ge "a"
- eq 等しい $x eq "a"
- ne 等しくない $x ne "a"
複数の条件式の組み合わせで複雑な条件式を作ることができます。「かつ(and)」、「または(or)」などの論理演算子を使います。
- 論理積(かつ) and (&&) 条件式1 and 条件式2
- 論理和(または) or (||) 条件式1 or 条件式2
- 排他的論理和 xor 条件式1 xor 条件式2
- 否定 not (!) not 条件式
真理値表(and、or、xor)
条件式1 条件式2 and or xor 真 真 真 真 偽 真 偽 偽 真 真 偽 真 偽 真 真 偽 偽 偽 偽 偽 真理値表(not)
条件式 not 真 偽 偽 真 例 「奇数かつ3の倍数であるかどうか」を判定するプログラム
$x = 9; # 判定する数字 if ( ( $x % 2 == 1) and ( $x % 3 == 0 ) ) { print "$xは「奇数かつ3の倍数」です。\n"; } else { print "$xは「奇数かつ3の倍数」ではありません。\n"; };発展
論理積と論理和は、正しくは真理値ではなく最後に評価した条件式の値を返します。従って、
- 論理積
$a && $bは、$aが偽ならば$a、そうでなければ$b
- 論理和
$a || $bは、$aが真ならば$a、そうでなければ$bとなります。これを利用して、エラーメッセージの出力などを行うこともできます。
3つ以上の場合分けをする場合はif文を重ねて分岐を行います。すなわち、if文の中でif文を使用します。このような使い方を「入れ子にする」といいます。
例 変数$xの値を3で割った余りで分岐する場合
#!/usr/local/bin/perl if ( $x % 3 == 0 ) { print "3で割り切れます。"; } else { if ( $x % 3 == 1) { print "3で割った余りは1です。"; } else { print "3で割った余りは2です。"; }; };このような場合、簡単に書く方法としてelsifが用いられます。elsifを用いたif文は以下の形をしています。入れ子の形にならないのでプログラムがわかりやすくなります。
if ( 条件式1 ){ ブロック1 } elsif ( 条件式2) { ブロック2 } else { ブロック3 };else部分をelsifに変えていくことで、さらに多くの場合分けでも対応することができます。
入力された年がうるう年かどうかを判定するプログラムを作成せよ。うるう年になる条件は、「4で割り切れて100で割り切れないもの。または、400で割り切れるもの」とする。
練習問題の答