if文は、ある条件を評価して、それが真ならばそのあとのブロックを実行します。
if(条件式){
実行文;
}ブロックとは、{ }で囲まれた文の集まりのことです。 ブロックの中の文は1つとは限らず、いくつでもかまいません。 また}のあとのセミコロン(;)は必要ありませんが、書いてもエラーにはなりません。 if文の動作を図にすると下のようになります。
実際には次のようになります。
if($age >= 20){
print "今日もお疲れ様でした。 ビールで乾杯!";
}上の例では、$ageの値が20以上ならば以下のprint文を実行します。
では、$ageの値が20未満の場合に「お酒は20歳になってから」と表示させるためにはどうすればいいでしょうか? それには、上のif文の後にelseブロックを付け足します。
if($age >= 20){
print "今日もお疲れ様でした。 ビールで乾杯!";
} else {
print "お酒は20歳になってから。";
}elseブロックは、if文の条件が偽だったときに実行されます。 下の図はif-else文の処理の流れを表した物です。
さて上のスクリプトをチョット改造して、$ageの値が18以上20未満ならば「お酒はもう少し待っててね。」と表示するようにしましょう。
if($age >= 20){
print "今日もお疲れ様でした。 ビールで乾杯!";
} elsif($age >= 18){
print "お酒はもう少し待っててね。";
} else {
print "お酒は20歳になってから。";
}まず最初のif文で、$ageが20以上かどうかが評価されます。 そしてそれが偽だったら、今度はelsifブロックのところで$ageの値が18以上かどうかを評価します。 もしそれが真ならば「お酒はもう少し待っててね。」と表示し、もし偽だったら、つまり$ageが18未満なら「お酒は20歳になってから」と表示します。 このようにelsifブロックを使うと処理の流れをより細かく制御できます。 elsifブロックは1つではなく、いくつでも作ることが出来ます。
さて、Perlのモットーに「簡単に出来る物は簡単に」と言うのがあります。 そしてそれを実現するために、簡単なif文を1行で表記する方法を用意しています。
print "今日もお疲れ様でした。 ビールで乾杯!"
if ($age >= 20);
今までは「ある条件が真ならば」処理をするという形のif文を作ってきましたが、今度はその逆、つまり「ある条件が偽ならば」処理をするという形のif文を作りましょう。 そのために前節で登場した論理演算子の1つ、!演算子やnot演算子を使います。 試しに、上で作ったif-else文でやってみます。
if(!($age >= 20)){
print "お酒は20歳になってから。";
} else {
print "今日もお疲れ様でした。 ビールで乾杯!";
}上の例では、if文の条件の前に!演算子が使われています。 なので$ageの値が20未満のときに真となります。 前に書いたものと比べて、ifのブロックとelseのブロックが反対になっていることを確認してください。 !演算子とnot演算子の違いは、not演算子の方が優先順位が低いというだけです(「§2.3 演算子」参照)。
上のような条件の評価はときどき使うのですが、「偽ならば真」というのはやはりわかりづらいですよね。 そこでunless文を使うと、!演算子を使わなくてすむので少しだけわかりやすくなります。 上と同じことをunless文を使って書くと次のようになります。
unless($age >= 20){
print "お酒は20歳になってから。";
} else {
print "今日もお疲れ様でした。 ビールで乾杯!";
}"unless"という単語には「もし〜でなければ」という意味があり、その意味のとおり、次の条件が偽ならばそれ以降の処理をします。 unlessとelseやelsifを組み合わせて使うことは出来ますが、elsunlessというのはありません。 またunlessにも、1行で書く簡単な方法があります。
print "お酒は20歳になってから。" unless($age >= 20);
この節ではif文について見てきました。 次の節ではループ制御の第1弾としてfor文を取り上げます。