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 編資料