[Perlトップページ]

条件判断 - if文 -

if文

if文は、C言語と同様に条件判断を行い、条件が満たされれば実行します。下記の書き方に従います。

(正しい書き方)

if (条件式) {
    実行文;
}

実行文は複数行になっても構わないのですが、注意してほしいのは 実行文が1行でも

(誤った書き方)

if (条件式) 
    実行文;

としてはいけません。{ } で閉じなければいけません。 これは、他のwhile文、for文などでも同様です。

また、if文は、簡潔に1行で表記することもできます。

実行[ if (条件式);

条件が満たされればある処理を実行し、満たされなければ 別の処理をしたい場合があります。その場合も、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文

unless文は、if文と反対に、条件が満たされないときに実行します。

unless (条件式) {
    実行文;
}

(または)

実行[ unless (条件式);

演算子or, and

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つの要素からなるリストを返す。

($sec, $min, $hour, $mday, $mon, $year,$wday, $yday, $isdst) = localtime(time);

ただし、$sec, $min, ... の順に、
秒数(0-59)、分(0-59)、時(0-23)、日(1-31)、月(0-11)、年(1900年からの年数)、 曜日(日(0)-土(6))、年日数(1月1日を0とする)、$isdst(夏時間なら0以外の値)を表す。

この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才ですね

[Perl講座] [須崎純一トップページ]
須崎純一 京都大学大学 工学研究科都市環境工学専攻 環境情報学講座