if文は、C言語と同様に条件判断を行い、条件が満たされれば実行します。下記の書き方に従います。
(正しい書き方)
if (条件式) { 実行文; }
実行文は複数行になっても構わないのですが、注意してほしいのは 実行文が1行でも
(誤った書き方)
if (条件式) 実行文;
としてはいけません。{ } で閉じなければいけません。 これは、他のwhile文、for文などでも同様です。
また、if文は、簡潔に1行で表記することもできます。
条件が満たされればある処理を実行し、満たされなければ 別の処理をしたい場合があります。その場合も、C言語と同様、 if-else文を用います。
if (条件式) { 処理Aの実行文; } else { 処理Bの実行文; }
また、ある条件が満たされない場合に、別の条件の判定をしたい場合が あります。その場合は、C言語ではif-else if文ですが、 Perlでは少し表記が変わりましてif-elsif文を用います。
if (条件式A) { 処理Aの実行文; } elsif (条件式B) { 処理Bの実行文; } else { 処理Cの実行文; }
if文の判定では、数の比較や文字列の比較を行いますが、 その両者において表現が異なります。
数値 | 文字列 | 意味 |
---|---|---|
$x == $y | $x eq $y | 等しい (equal) |
$x != $y | $x ne $y | 等しくない (not equal) |
$x < $y | $x lt $y | $x は $yより小さい (less than) |
$x > $y | $x gt $y | $x は $yより大きい (greater than) |
$x <= $y | $x le $y | $x は $y以下 (less than equal to) |
$x >= $y | $x ge $y | $x は $y以上 (greater than equal to) |
$x <==> $y | $x cmp $y |
$x と $yが等しければ0 $x より $yが小さければ-1 $x より $yが大きければ1 (compare) |
演習4-1
下記のスクリプトをkadai4-1.plとして書き、実行結果を確認せよ。また、 $dataの値を適当な数字に書き換えて、その都度実行して確認せよ。
#!/usr/bin/perl $data = 1; if ($data > 100) { print "\$data = $data は100より大です。\n"; } elsif ($data == 100) { print "\$data = $data は100です。\n"; } elsif ($data >= 0) { print "\$data = $data は0以上100未満です。\n"; } else { print "\$data = $data は0未満です。\n"; }
unless文は、if文と反対に、条件が満たされないときに実行します。
unless (条件式) { 実行文; } (または) 実行�[ unless (条件式);
if文で、複数の条件をもとに判定したい場合に使います。 「条件Aまたは条件Bを満たすか」判定したいのであれば、 orか、||を使います。 また、逆に「条件Aかつ条件B」としたいのであれば、 andか、&&を使います。 条件の数は3つ以上記述しても構いません。
(条件Aまたは条件B)
if (条件A or 条件B) { 実行文; } または if (条件A || 条件B) { 実行文; }
(条件Aかつ条件B)
if (条件A and 条件B) { 実行文; } または if (条件A && 条件B) { 実行文; }
演習4-2
time関数は1970年1月1日から現在までの秒数を返してくれる。 localtime関数は、time関数が返す時刻を ローカル時刻に変換してくれる。その際に、9つの要素からなるリストを返す。
このlocaltime関数を用いて、現在の時刻により表示させるメッセージを 変更したい。下記のスクリプトをkadai4-2.plとして書き、 実行結果を確認せよ。
#!/usr/bin/perl $hour = (localtime)[2]; if ($hour >= 5 and $hour < 10) { print "おはようございます。今、$hour 時です。\n"; } elsif ($hour >= 10 and $hour < 18) { print "こんにちは。今、$hour 時です。\n"; } else { print "こんばんは。今、$hour 時です。\n"; }
演習4-3
演習4-2と同様に、localtime関数を用いて、今年の誕生日が過ぎたか、 まだか、または今日なのかを表示させたい。下記のスクリプトのうち ******で隠された部分を補ってkadai4-3.plとして書き、実行結果を確認せよ。
#!/usr/bin/perl $birth_year = 1983; $birth_mon = 6; $birth_day = 5; ($mday, $mon, $year) = (localtime)[3,4,5]; # ここにif-elsif-else文を書く ******************************************* ******************************************* ******************************************* ******************************************* ******************************************* ******************************************* *******************************************
(表示されるメッセージ:下記の3種類のどれかが表示される) 今年の誕生日は過ぎましたね 今日は誕生日ですね ! 今年の誕生日はまだですね
演習4-4
演習4-3を拡張して、今年の誕生日がまだで今月誕生日を迎える場合、 あと何日で誕生日かという情報も表示させたい。また、来月以降に誕生日を迎え る場合、何ヵ月後かという情報も表示させたい。 スクリプトをkadai4-4.plとして書き、実行結果を確認せよ。
(表示されるメッセージ例:下記の4種類のどれかが表示される) 今年の誕生日は過ぎましたね 今日は誕生日ですね ! 今年の誕生日はあと3日ですね 今年の誕生日は2ヶ月後ですね
演習4-5
演習4-4を拡張して、現在の年齢も情報も表示させたい。スクリプトを kadai4-5.plとして書き、実行結果を確認せよ。
(表示されるメッセージ例:下記の4種類のどれか+年齢のメッセージが表示される)< 今年の誕生日は過ぎましたね あなたは今18才ですね 今日は誕生日ですね ! あなたは今18才ですね< 今年の誕生日はあと3日ですね あなたは今17才ですね 今年の誕生日は2ヶ月後ですね あなたは今17才ですね