SAK 図書館

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

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 編資料
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索



Copyright (C) 1999-2017 Y.SAK