【perl】プロトタイププログラム「入力フォーム→入力データ表示」のプログラムを書いた。

こちら↓で紹介した初プログラムを完成させる前に、プロトタイプとして以下のプログラムを作成していました。せっかくなので、そちらも公開。
http://d.hatena.ne.jp/midori_kasugano/20090520/1242953284


プロトタイプは、入力フォームがメッセージ入力のみの1つ。
初プログラム(上記リンク先)は、入力フォームがメッセージと名前入力の2つ。


【1.入力フォーム】form2.html

<html>
<head>
<title>入力フォーム</title>
</head>
<body>
<form method="post" action="form2.cgi">
<p>メッセージを入力してください</p>
<input type="text" name="message" size="20">
<input type="submit" value="送信">
</form>
</body>
</html>


【2.入力された値を返してブラウザ表示する】form2.cgi

#! /usr/bin/perl

#1.入力されたデータを受け取る
read(STDIN, $alldata, $ENV{'CONTENT_LENGTH'});

#1-1.read関数で受け取った入力データを変換(入力データはエンコーディングされて送られてくるため)
#エンコーディングデータをsplit関数にて=で分割し、=の左側あるデータを$keyに、右側にあるデータを$valueに入れる。
($key, $value) = split(/=/,$alldata);
#=の右側にあったデータの変換作業
#正規表現の利用
$value = ~ s/\+/ /g;
$value = ~ s/%([a-fA-F0-9][a-fA-F0-9])/pack('H2',$1)/eg;

#連想配列を使用
$put{"$key"} = $value;

#2.入力してもらった情報をブラウザ表示するHTML
print "Content-Type: text/html; charset=Shift_JIS\n\n";
print "<html>\n";
print "<head><title>表示画面</title></head>\n";
print "<body>\n";

#受け取ったデータをブラウザ表示する
print "<p>入力されたメッセージは$put{'message'}です。</p>\n";

print "</body>\n";
print "</html>\n";


このプログラムも、実は、ヒアドキュメントやモジュールを使ったほうがかなり楽。


perl初心者の私がどうやって調べたかですが、以下の記事の文末に紹介してあります。
http://d.hatena.ne.jp/midori_kasugano/20090520/1242953284


ソース作成時にもっとも使用した書籍は、ハーシー著の「Perl/CGI」です。
これに、HTTPとクライアントPC間でどんな風にデータのやり取りがなされるか(エンコーディングについて)も書いてあるし、ポイントとなるsplit関数や環境変数正規表現なんかも書いてあります。
これらの情報を元に試行錯誤をすると、なんだかできあがっちゃった感じです。


※ただし、いまだpack関数は意味が分かりません。関数リファレンスで、公式は発見したものの、意味がわからない…。H2という数字は、人力でいろいろ試してみた結果です。