SAK 図書館
CGI-Perl 基礎実地編 - 実習4 (制御構造 - if 判定)
■test04.cgi
------ ↓ ここから ↓ ------
#!/usr/local/bin/perl
#// 準備
$msg1 = "おはよう〜";
$msg2 = 'こんにちは〜';
$msg3 = 'こんばんは〜';
#// ローカル時間取得
($ss, $mn, $hh, $dd, $mm, $yy) = localtime(time);
$yy += 1900;
$mm++;
#// 時間によるメッセージセット
if ($hh > 2 and $hh < 12) {
$msg = $msg1;
}
else {
if ($hh > 11 and $hh < 19) {
$msg = $msg2;
}
else {
$msg = $msg3;
}
}
#// HTML 出力
print "Content-type: text/html\n\n";
print "<HTML>\n";
print "<P>$msg ですのん。</P>\n";
print "</HTML>\n";
#// 終了
exit(0);
------ ↑ ここまで ↑ ------
■解説
・この test04.cgi は、実行するとブラウザに
「おはよう〜 ですのん。」
「こんにちは〜 ですのん。」
「こんばんは〜 ですのん。」
のいずれかのメッセージを時間によって表示します。
($ss, $mn, $hh, $dd, $mm, $yy) = localtime(time);
|_ 日本時間取得
$yy += 1900;
|_ 1900 年からの年が返ってくるので +1900 する。
+= は、$yy = $yy + 1900; と同じ動作です。
$mm++;
|_ 0 〜 11 が返ってくるようなので +1 する。
++ は、インクリメントで、$mm = $mm + 1; と同じ動作です。
$i = $mm++; と $i = ++$mm; では、$mm は共にインクリメント
されますが、$i の値は違います。
++ が後にあると代入された後にインクリメントされます。
つまり、実行前の $mm が 1 だとすると、
$i = $mm++; では、$i に 1 が、
$i = ++$mm; では、$i に 2 が、セットされます。
デクリメントは -- で、-1 します。
#// 時間によるメッセージセット
if ($hh > 2 and $hh < 12) {
| | |_ and かつ (&& の方が優先度が高い)
| | or それとも (|| の方が優先度が高い)
| |
| |_ > より大きい
| < より小さい
| >= 以上
| <= 以下
| == 等しい
| != 等しくない
| 文字列の比較は、比較演算子が異なります。
| eq, nq などが文字列比較用にあります。
|
|_ 判定
** 3 〜 11 時までは、「おはよう〜」
12 〜 18 時までは、「こんにちは〜」
それ以外の時間は、 「こんばんは〜」
を $msg にセットします。
■補足
・if() 文の比較演算子が数値と文字列で違うので注意!!
and と or が混在する判定では () で優先順位を明確にした方が良い。
if (($hh > 2 and $hh < 12) or $hh == 0)
~~~~~~~~~~~~~~~~~~~~~~
if ($hh > 2 and ($hh < 12 or $hh == 0))
~~~~~~~~~~~~~~~~~~~~~~
・if() が真となるのは、0 以外の論理評価になったときである。
従って、$a = 1 なら、if ($a) { 実行 } となる。($a = 2 でも)
従って、$a = 0 なら、if ($a) { } else { 実行 } となる。
・$a = 0 なら、if (!$a) { 実行 } でも可です。
|_ 否定演算子
■実地
・test04.cgi も実際に作成してテストしてみましょう。
アレンジを忘れずに。
■CGI-Perl 基礎実地編資料
■CGI-Perl 基礎編資料
■CGI-Perl 応用実地編資料
■PHP 基礎編資料
■PHP + MySQL 編資料