【Webプログラミング - Code.007】CGI(Perl)基本動作 その7:「モジュールを使う」後編

   Code.007                                                 2002年11月25日発行
■━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━■
                           【 Webプログラミング 】

                       〜 猫的プログラマーとその軌跡 〜
■━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━■

              ▼毎週月曜日に配信しています。
              ▼等幅フォントでご覧いただくとキレイに見えます。
              ▼登録・解除はこちらから可能です。
                < http://www.ichikoro.com/webp/ >
                  ※ぜひお友達にもご紹介ください(^^)/

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 CGI(Perl)基本動作 その7:「モジュールを使う」後編
──────────────────────────────────────
CGIモジュールは非常に規模の大きな物です。
クエリーを取得するだけに止まらず、HTMLをprintなどで記述しなくても、
メソッド(関数)を呼び出すことでWebページが構成できるという機能を備え
ています。

全てを覚えて使いこなすのは大変...と言うより、そんなことする必要はも
ちろん無いので(^^; よく使う機能だけを説明します。いつもはサンプルの
後に説明するという形ですが、今回は各関数の使い方をダイジェストでお届
けすることにします。

───────
  呼び出し方
───────
前述の通りCGIモジュールは非常に巨大です。
そこで、自分が必要とする機能だけを指定します。

    use CGI;                 #全て読み込まれる
    use CGI qw(:cgi);        #クエリーを取得するのが目的であればコチラで
    use CGI qw(:standard);   #標準的な機能が全て読み込まれる(:cgiも含む)

どのメソッド(関数)が呼び出されるか確認したい場合は、CGI.pmのソース中に
ある %EXPORT_TAGS をご覧ください。直接エディタで開くか、コマンドライン
(DOS窓やtelnet)から

    perldoc -m CGI

と打ってみてください。

───────
 HTTPヘッダ
───────
○header()
    header()はその名の通り、HTTPヘッダーを作成します。

        #例:1

            my $q = new CGI();

            print $q->header();            # print "Content-type: text/html\n\n";と同意
            print "Hello!";

            exit(0);

    header()への引数に header("image/gif") といった様に自分で
    MIMEタイプを指定できます。デフォルトは上記の通り "text/html"
    となります。

    またオプションを指定出来ます。

        #例:2

            my $q = new CGI();

            print $q->header( -type     => "text/plain",   #MIMEタイプ
                              -charset  => "Shift_JIS",    #文字コードを指定
                              -expires  => "+10y"          #10年間有効(キャッシュせよ)
            );
            print "Hello!";

            exit(0);

    expiresにはキャッシュの有効期限を設定できます。
    CGIモジュール独自の書式で下記の記号と組み合わせることで
    +30s なら 30秒後、-5y なら 5年前 といった記述が可能です。
    もちろん、Fri, 31-Dec-2030 23:59:59 のような記述もOKです。

        s ..... 秒
        m ..... 分
        h ..... 時間
        d ..... 日
        M ..... 月
        y ..... 年
        now ... 今

    他にも

        #HTTPステータス
        -status => "200 OK";

        #Cookieを食わせる
        -cookie => "maker=honda; expires=Fri, 31-Dec-2030 23:59:59; path=/;",

        #NPHスクリプトの場合はtrue値
        -nph    => 1,

    などのオプションが使用できます。
    さらにこの他に追加したい物があれば、

        -[ヘッダ名] => 値

    として定義できます。


○redirect()
    ブラウザを指定したWebページにリダイレクト(ジャンプ)させます。

        #例:1

            my $q = new CGI();

            #指定URLへジャンプ!
            print $q->redirect("http://www.ichikoro.com/");  #http://から始めること

            exit(0);


───────
 クエリー取得
───────
○param()
    param()は引数や戻り値の形態によって、様々な機能を果たします。

        #-------------------------------------------------------#
        # 例:全てのクエリー名を取得
        #-------------------------------------------------------#

            my $q = new CGI();

            #全クエリー名を取得
            @names = $q->param();       #引数なし、リストで受け取る
                                        #場合は全ての名前を取得

            #ヘッダ出力
            print $q->header();

            #クエリー名を表示
            foreach $name ( @names ){
                print "$name<BR>\n";
            }

            exit(0);


        #-------------------------------------------------------#
        # 例:特定のクエリーを取得
        #-------------------------------------------------------#

            my $q = new CGI();

            #値を取得(その1)
            $value  = $q->param("maker");       #値が一つしかない場合

            #値を取得(その2)
            @values = $q->param("shashu");      #同一のクエリー名で、複数の値が
                                                #期待される場合(チェックボックスなど)

            #ヘッダ出力
            print $q->header();

            #クエリー名と値を表示
            print "maker | $value  <BR><BR>\n";

            #複数の値を表示
            $value_join = join(",", @values);   #値を全て結合する

            print "shashu | $value_join <BR>\n";
            print "<BR>\n";


            exit(0);


        #-------------------------------------------------------#
        # 例:特定のパラメーターを削除する
        #-------------------------------------------------------#
            my $q = new CGI();

            #ヘッダ出力
            print $q->header();

            #表示(削除前)
            printf("maker: %s\n", $q->param("maker") );

            #-- 削除 --#
            $q->delete("maker");        # $q->all() とすると全て削除する。

            #表示(削除後)
            printf("maker: %s\n", $q->param("maker") );

            exit(0);


───────
   まとめ
───────
今回覚えていただきたいメソッド(関数)はたった3つです。

    ・head()
        HTTPヘッダーの出力

    ・location()
        リダイレクト

    ・param()
        クエリー値の取得

これ以外は、あまり頻繁に使う機会がありません(^^;
(少なくとも私の場合ですが)

    ○参考文献
        ・CGIモジュール v2.70
         http://member.nifty.ne.jp/hippo2000/perltips/Cgi.htm

        ・とほほのWWW入門
         http://tohoho.wakusei.ne.jp/www.htm


───────
   次回予告
───────
次回からは、ファイル処理について解説したいと思います。
お楽しみに(^^)/


───────
  分からない
───────
いまいちよく分からない場合は、以下へれっつらごー。

  ・サポートBBS
    このメルマガ専用のサポート掲示板
      http://www.ichikoro.com/webp/bbs/

  ・CGIプログラミングML
    CGIなどWebに関する話題を繰り広げるメーリングリスト
    このメルマガとは何の関係もありませんので発言時は注意を。
      http://www.ichikoro.com/cgi/ml/

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
                           編    集    後    記
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
というわけで見事、大学に合格いたしました!
応援のメールをお送りいただいた皆様、本当にありがとうございました。
元気が出ました。

手続き関係も一通り終わり、後は4月の入学を待つのみです。
思えば9月くらいに思い立ってから大学の決定、願書の出願、受験、お金の工面など
スピード感あふれる毎日でした。入学金だけ国民生活金融公庫さんから融資していた
だいたのですが、お金を借りるのって大変なのだなと、改めて実感しました。

試験当日、小論文は時間を見誤って最後の方が尻詰まりな文章になり、面接は緊張
したせいかシドロモドロ。頭悪そうな台詞を連呼し、発表日まで不安でたまりませ
んでした。ホント、幸運に恵まれていたようです(^^ゞ



幸運はまだもう一つあるのです。
試験当日、夜行バスで広島へ向かいました。

高校のころから、ずっと好きだった子がいました。
卒業後、上京してからもチョクチョク連絡を交わしていましたが、何だかんだで
上手くいかなくなり、ある事情から連絡もとれなくなり数年。ある時、その子が
広島でまだ演劇を続けているという話を聞いたのです。

胸を高鳴らせ、劇場へ向かいました。
ライトを浴びた彼女は、以前よりずっと上手くなっていました。
頑張ってきたんだなぁと思うとともに、いい人に囲まれていたんだろうと
ちょっと焼けたりしました。

緞帳が下り、客出しのために出てきた彼女と、少しの間話をしました。
「久しぶり!」と顔を手で覆い、照れた感じでしたが、以前と変わらない屈託の
ない笑顔を見せてくれました。ちょっとだけ大人っぽくなっていたように感じ
ました。


彼女が元気だったこと。
笑顔を見せてくれたこと。
これだけで、次のステップが踏めそうな気がしました。

これからどうなっていくのか分かりませんが、
今は、この数年間ずっと心の奥でくすぶっていた気持ちが、
少しずつ晴れていくような気がしました。


と、これを書いている時に母校の演劇部が全国大会に出場を決めたと、
もう一つさらに奇跡が舞い込んできました。


う〜ん、人生の転換期っていうのはこんなにも突然ポコポコ奇跡が
起こるものなのでしょうか?(^^; まだしばらくの間、落ち着けそうに
ない感じがします。


>   ハグリッドの言うとおりだ。
>   来るもんは来る...来たときに受けてたてばいいんだ。
                                      〜 ハリー・ポッターと炎のゴブレット


私の場合は、望んでいるせいでしょうか?(^^ゞ

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

                   【 Webプログラミング Code Sample 】

                    発  行 : ichikoro.com
                発行責任者 : 勝部 麻季人
                              < katsube@ichikoro.com >
                 Webサイト : < http://www.ichikoro.com/webp/ >
            お問い合わせ先 : < mm-webp@ichikoro.com >

                            Powerd by まぐまぐ
    All Right Reserved, CopyRight(C) 2001 Webプログラミング Code Sample
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■