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

perlってどんな言語?、という状態から2日と半分。頭を悩ませまくり、調べまくってようやく書いた初perlプログラムです。


ちなみに、プロトタイプはこちら↓(これより簡単なものを先に作りました。)
http://d.hatena.ne.jp/midori_kasugano/20090520/1242976726


動作確認できてます。動作環境は以下。
・xampp
・Active Perl
windows XP
firefoxIE(すみません、バージョン忘れました。)



私にとっては記念すべき初プログラムなので、ソースを載せちゃいます。


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

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

【2.入力されたデータを表示させる】forms.cgi

#! usr/bin/perl

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

foreach $data (split(/&/,$alldata)){
 ($key, $value) = split(/=/,$data);
 $value = ~s/\+/ /g;
 $value = ~s/%([a-fA-F0-9][a-fA-F0-9])/pack('H2, $1')/eg;

 $put{"$key"} = $value;
}

#ブラウザ表示のためのHTML
print "Content-Type: test/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 "<p>入力されたお名前は$put{'name'}です。</p>\n";

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


1は問題なくプログラミングできたんです。難産だったのは2。2については、モジュールを使ったりヒアドキュメントを使ったらもっと簡単なんです。

ヒアドキュメントの使用については、全くそこに頭がいきませんでした。モジュールの使用については、どうやってプログラムが動くのかさっぱり理解できなかったので、使用をあきらめました。


百戦錬磨のプログラマーから見ると、ヒアドキュメントやモジュールを使ってない点から、なんとめんどくさいことを、みたいな感じらしいです。(ただ、勉強には良いようです。)


ま、ヒアドキュメントやらモジュールやら2の詳しい説明やらは、また後日。


ちなみに、このプログラム作成で参考にしたものは以下。


(1)perlを知る

プログラミングPerl〈VOLUME1〉

プログラミングPerl〈VOLUME1〉

このプログラムを書く前に、この本の最初の20ページを読んでperlとはどんな言語なのか概要を理解。特に、配列や連想配列(HASH)についての理解を行った。最初の20ページ以外は、全く参照していません。


(2)実際にプログラミング
下の2冊と、ネットでの関数リファレンスと用語辞典の合わせ技で作成。

速効!図解プログラミングPerl/CGI―Windows Perl 5.8対応

速効!図解プログラミングPerl/CGI―Windows Perl 5.8対応

この処理を行うにはこーするのです、というのが具体的に書いてある。本質的な理解はこの本だけでは進まなかったが、いち具体例を参照する分には役に立ちました。使い方としては、この本の目次を見て、行いたい処理に近いページをつまみ読み。(わからない部分を芋づる式にたどった結果、結局すべてに目を通していました。)
この本で理解しきれないことは、下の本で検索。辞書的に使用しました。
初めてのPerl

初めてのPerl

本質的な理解をする手助けになった本。


以上3冊は発行年度が古いものなので、買うなら新しいものを。