Perl初心者の部屋  目次  イントロ    CGIとWWWサーバ  特定プログラミングの質問  セキュリティ
                       .d8888b.    .d8888b.   8888888
                      d88P  Y88b  d88P  Y88b    888
                      888    888  888    888    888
                      888         888           888
                      888         888  88888    888
                      888    888  888    888    888
                      Y88b  d88P  Y88b  d88P    888
                       "Y8888P"    "Y8888P88  8888888

                       PCP => Perl CGI Program (ming)

                                Version 1.0

Shishir Gundavaram <shishir@ora.com>
Tom Christiansen <tchrist@perl.com>

2.0 - モジュール

Q2.1: CGIスクリプトのコードを書く時は全てPerl CGIモジュールを 使用すべきなのでしょうか? 自分でやるより簡単ではないのですか?

Q2.2: xyzモジュールがどう機能するのかどうやって推し測れば いいのですか?

Q2.3: Perl4で利用できるCGIやWWWライブラリは何がありますか?

Q2.4: Perl5で利用できるCGIモジュールには何がありますか?  どれを利用すべきでしょうか、又その理由は?

Q2.5: こんなにたくさんのCGIperlライブラリが何故オブジェクト指向に なっているのですか?  私はこのオブジェクト指向(以下OOと略)がちっともわかりません。  非プログラマが利用できるもっと簡単なライブラリはないのですか?  どの位難しいのですか?


2.0 - モジュール


Q2.1: CGIスクリプトのコードを書く時は全てPerl CGIモジュールを 使用すべきなのでしょうか? 自分でやるより簡単ではないのですか?

本当はあなたがやるつもりがあるかどうかにかかっているのです。 一般にはCGIモジュールは重い処理をするCGIスクリプト向けに 使用されるべきでしょう。 簡単なスクリプトは、自分自身でやったり、 CGI Lite (現バージョンは v1.62)を使う方がずっと簡単で早いでしょう。 本当に望むのであれば、旧Perl 4 cgi-lib.plライブラリを使うことさえ可能です。


Q2.2: xyzモジュールがどう機能するのかどうやって推し測れば いいのですか?

大半のモジュールはモジュール自体にmanページ [訳注:Windowsでいうヘルプファイルに近いもの]が埋め込まれています。 上記のケースでは、pod2manスクリプトを使ってmanページを見ると よいでしょう。:

% pod2text name_of_module.pm
% pod2man name_of_module.pm | nroff -man | more

[訳注:この機能はPerl for Win32等にはありません。UNIX用です。]


Q2.3: Perl4で利用できるCGIやWWWライブラリは何がありますか?

Perl4用に最も広く利用されているCGIライブラリは、Steven Benner作の cgi-lib.pl です。


Q2.4: Perl5で利用できるCGIモジュールには何がありますか?  どれを利用すべきでしょうか、又その理由は?

CGI.pm
この素晴らしいモジュールは CGI::* モジュールと同様の機能をいくつか 持っています。 モジュールをいくつも取り扱う気にならない場合、これを利用するとよいでしょう。 この文書の後の方でCGIスクリプトをデバッグするためにCGI.pmをどう使用するか という例を挙げています。

また、LincolnはWebとCGIについて優れた本を書いています。タイトルは How to Set Up and Maintain a World Wide Web Siteです。

CGI::* モジュール群
これらのモジュール群の大半は元々 Tim Bunceによって書かれ、現在は Lincoln Steinによって保守されています。これらはフォームの生成やデコード、 CGIプログラムのデバッグ、フォーム間の状態の維持に利用できます。

CGI Lite
この軽量モジュールは CGI::* モジュールの代替品です。 古くなったcgi-lib.plの 栄光あるバージョンにいくつかの追加機能を付加しています。

これら三つのモジュール全てに複数フォームデータのデコード能力が ついています。(例:ファイルアップロード)


Q2.5: こんなにたくさんのCGIperlライブラリが何故オブジェクト指向に なっているのですか?  私はこのオブジェクト指向(以下OOと略)がちっともわかりません。  非プログラマが利用できるもっと簡単なライブラリはないのですか?  どの位難しいのですか?

実際には全然難しくないのです。手っ取り早い入門書としては、 Tom Christiansenの Easy Intro to Using Perl Objects があるので参照して下さい。

上記で述べたCGIモジュールは、使うのは朝飯前レベルです! ここで、 CGI Liteを使ってフォームデータを出力する簡単な例を示します。:

#!/usr/local/bin/perl5

use CGI_Lite;

$cgi = new CGI_Lite;
%data = $cgi->parse_form_data;

print "Content-type: text/plain", "\n\n";

foreach $key (keys %data) {
    print $key, " = ", $data{$key}, "\n";
}

exit (0);
注意:あなたのシステムにPerlがビルドされていなかったり、 他のライブラリファイルと一緒にこれらのモジュールをインストールする権限がない 場合は、適当な場所にモジュールを置いてスクリプトに次のように付け加えれば ちゃんと使用することができます。:
BEGIN {
    unshift (@INC, "/your/dir/favorite/place");
}
さて、ここからがCGI::* モジュールを使った例です。:
#!/usr/local/bin/perl5

use CGI::Form;

$cgi_form = new CGI::Form;

print <<'End_of_Header'; #End_of_Headerまでを出力
    <HTML>
    <HEAD><TITLE>Watch This!</TITLE></HEAD>
    <BODY>
    <H1>Watch This!</H1>
End_of_Header

print $form->startform;

## テキストフィールドを生成

print "Name: ";
print $form->textfield('name'), "<BR>\n";

## ラジオボタングループを生成

print "<P>Where do you live: <BR>";
print $form->radio_group (-name      => 'where',
                          -values    => ['North America',
                                         'South America',
                                         'Europe',
                                         'Australia',
                                         'Asia',
                                         'Antartica'],
                          -default   => 'North America',
                          -linebreak => 'true');

## テキストエリアフィールドを生成

print "Comments: ";
print $form->textarea('comments', undef, 5, 40);

print "<P>";
print $form->reset;
print $form->defaults;
print $form->submit ('Send!', 'Submit');
print $form->endform;

print "</BODY></HTML>";

reset, defaultssubmit メソッドは 異なったタイプのボタンを生成します。 リセットボタンは現在のフォーム上の値をクリアし以前の状態(あるいは セッション)の値を表示してくれます。 デフォルトボタンはフォームを全体的にクリアします。そしてサブミット メソッドはあなたがサーバにデータを送るためのサブミットボタンを 生成します。

さて、簡単ではありませんでしたか?


This document, and all its parts, are Copyright (c) 1996, Shishir Gundavaram and Tom Christiansen. All rights reservered. Permisson to distribute this collection, in part or full, via electronic means (emailed, posted or archived) or printed copy are granted providing that no charges are involved, reasonable attempt is made to use the most current version, and all credits and copyright notices are retained. Requests for other distribution rights, including incorporation in commercial products, such as books, magazine articles, or CD-ROMs should be made to either of the authors.


ご意見、ご要望は、 電子メールまたは 投稿にお願い致します。

ホームページへ戻る。