back

Perl****を自分で作ってみよう(基礎編)


ソケットを使わないGET書き込みCGIを作成してみよう。

前提として、perlについての若干の知識を要します。

今日は初心者への連載をさぼって、客寄せ的に赤ん坊でも作れるようなCGIを作成してみます。
ですから、この次は初心者への連載が終了してからになると思います。
perl****と言えばソケットを使わないとできないと思われがちですが、そうでもありません。
何もそっくりに作る必要はありません。
似たような機能があれば初心者には相応なのです。
ここでは、自分オリジナルのperl[あなたの名前].cgiを作成しましょう。
便宜上ここではperlgt.cgiで名前を統一します。
各自、自分で名前を考えて下さい。

さてそれでは本題に入りましょう。
まず、環境変数チェックCGIを作成して下さい。
%ENVを使用したものがよいです。
サンプルを用意しましたので、 #!/usr/local/bin/perlを環境に合わせて変更してからご使用下さい。
perlを実行する環境によっては、使用できないものもあるので最初に断っておきます。
これはあると便利と言うだけなので、説明自体は省きます。 最初に流れ図のようなものを書くとよいのですが、今日は簡単なものなので省きます。

1、最初はhtmlファイルを作ってみましょう。
サンプル

その中で注意すべきところを説明します。
まずはこれです。
<FORM METHOD=GET ACTION="perlgt.cgi"target="new">
CGIの名前がperlgt.cgiなのでそう記述します。
メソッドについてはこの場合、POSTと記述してもあまり意味がないのでGETとしておきます。
target="new"と記述することによって、別のウインドーを作成します。これはそうしないと使いづらいからです。
<INPUT TYPE="text"NAME="content"SIZE=40>
<INPUT TYPE="text"NAME="url"SIZE=40>

変数はurlとcontentとして下さい。
これをperlgt.htmlとして保存します。

2、次はCGIをperlで作成してみましょう。できれば簡単な掲示板を作れる程度の知識があるとよいです。
Location:を使用することになります。

#!/usr/local/bin/perl まずはこの記述です。これはおまじないと考えてよいでしょう。サーバによってこの記述の仕方が異なるので注意が必要です。

require './jcode.pl';
「;」を忘れないで下さい。これも深く考えないで下さい。jcode.plについては同ディレクトリに入れて下さい。

if ($ENV{'REQUEST_METHOD'} eq "POST") {
	read(STDIN, $str, $ENV{'CONTENT_LENGTH'});
} else {
	$str = $ENV{'QUERY_STRING'};
}

@new = split('&', $str);

foreach $i (@new) {
	($variable, $value) = split('=', $i);
	$value =~ tr/+/ /;
	$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg;
	&jcode'convert(*value, 'sjis');
	$value =~ s/\r\n/\n/g;
	$value =~ s/\n/<BR>/g;
	$value =~ s/\r/\n/g;
	$bbs{$variable} = $value;
	}
これも深く考えないで下さい。おきまり文句だと思って下さい。
ここでは送信された情報がGETか、POSTを識別して、個別の対応をしてます。その後、送信された情報をCGIで使えるように処理をして 、変数にしまっています。
$url = $bbs{'url'};
$content = $bbs{'content'};

ここで、変数に代入しています。
$main_html="./perlgt.html";
先ほどのhtmlファイル名を便宜上変数に代入しています。

print "Location: $url?$content\n\n";
これでurlを出力します。$urlにGETでアクセスします。ただし?以下に$contentがありますから、$contentの情報をそのアクセス先に送信します。
最後にexit;を記述しておしまいです。アトハこれをperlgt.cgiと言う名前で保存すればOKです。
これはイメタグでの書き込みと大差ありません。
かっこつけて、perlでやっただけです。

今日使ったファイルです。
1、env.cgi
2、perlgt.html
3、jcode.pl
4、perlgt.cgi
すべて同じディレクトリで・・

この次ではソケットなるものを使用します。
このようにすすめてきたいと思います。
ここでつくったものはたいしたことはありません。 perl****式の名前を付けるのは正確でないでしょう。
これでどの程度理解できるのか反応を見たい、と言う意味あいも含めてあります。



なお、ここに書かれていることは転載可能です。直リンク、無断リンクもOKです。
文句、苦情、ご要望はhttp://neo.zipang.ne.jp/cgi-bin/home?shimane01/27までお願いします。