CGIプログラムでは、ユーザーからの要求を受けて、掲示板を表示したり、ユーザーからの書き込みをファイルに保存する処理を行います。ここでは、掲示板の基本的となる処理を行う方法について考えてみましょう。
エディタで「keijiban.cgi」を開いて、掲示板に書き込まれたデータを文字列に変換するためのサブルーチン(特定の処理を行うプログラムの集まりのこと)と、データ保存用のファイルに書き込みを行うサブルーチンを呼び出すための処理を記述します。
#送信データの処理を行うサブルーチンを呼び出す
&do_read;#訪問者をチェックするサブルーチンを呼び出す
&do_check;#処理を分岐
if ($command eq "regist") { &do_write; }
elsif ($command eq "master") { &master; }&display_form;
#データ保存用ファイルのデータを並列変数に格納
open(DATA,"<$datafile");
@lines = <DATA>;
close(DATA);#取り出したデータを1件ずつ項目ごとに分解
foreach (@lines) {($num,$date,$name,$email,$sub,$comment,$url,$host) = split(/,/,$_);
if ($email) { $name="<a href=\"mailto\:$email\">$name</a>"; }
if ($url) { $url = "<a href=\"http://$url\" target=_top>http://$url</a>\n"; }#書き込みデータを表示するサブルーチンの呼び出し
&display_message}
#HTML文書の終了タグを出力
print "</body></html>\n";
exit;Perlを使ったプログラムでは、特定の処理を行うプログラムを目的別にまとめて名前をつけておくことで、必要に応じて何度でも呼び出すことができます。このひとまとめにしたプログラムの集まりをサブルーチンと呼びます。サブルーチンは「&」に続けてサブルーチン名を記述することで、プログラム内のどこからでも呼び出すことが可能です。制御構文の「foreach」は、特定の配列変数の値を1つずつ取り出して、同じ処理を繰り返して実行させることができます。
例では、ユーザーが書きこんだコメントや題名・日付などのデータを1件分のデータとして、ひとまとめに保存するようにしています。
このため、すべてのデータを格納した配列変数「@lines」の値を1つずつ取り出して、ユーザーのブラウザに表示するための処理を繰り返し行うことで、すべての書き込みデータが連続してブラウザ上に表示されるようになっています。