書き込み時間を表示させるCGI
続いて、書き込み時間を表示できるようにする。

書き込みが行われた時の時間をファイルに記録し、
名前、コメントと共に表示するようすればよい。

フォームの下側を表示するCGIで作ったCGIの
$name=$in{"name"}; の上に以下を追記する。
$time = &jp_time;

if($name ne ""){print NEW "お名前:$name<br>\n";} の上に
print NEW "時間:$time<br>\n";

さらに、print <<A; の上に以下を追記する。
sub jp_time{
($sec,$min,$hour,$mday,$mon,$year,$wday)=localtime(time());
$mon=$mon+1;
$year=$year+1900;
@day=('日','月','火','水','木','金','土');
$jptime="$year年$mon月$mday日($day[$wday])$hour時$min分";
return $jptime;
}
1文ずつ説明をしていく。

$time = &jp_time;
書き込み時間を日本語表記で記録するためのもの。
このサブルーチンはPerlに用意されているものではないので自分で用意する。
下の□(sub jp_time{ )がこれにあたる。

print NEW "時間:$time<br>\n";
今までは書かれた名前とコメントのみをファイルに保存していたが、
同時に書き込み時間もファイルの保存するようにした。

下2行目:localtime関数:年月日、曜日、時間などの値が取り出せる。
それを、それぞれの変数に、秒・分・日・月・年・曜日の順に値が代入している。
注意すべきは、1月を0月、年は、その年から1900を引いた数が取り出されるので、
月には1を足し、年にも1900を足したものを代入することで丁度よいものになる。
それを記述したのが下3,4行目になる。

********************************
localtime
スカラー型で受け取ると以下のようになる。
Sat Mar 19 14:23:34 2005
配列型で受け取ると、配列[0~8]に、順番に
秒、分、時、日、月、年、曜日、元日からの日数、サマータイムの有無
という配列で取得できる。
********************************

下5行目:localtime関数で取り出される曜日は、0〜6という数字となっているので
0〜6をそれぞれ、日〜土にあてはめている。
取り出された$day[$wday]が[5]であるとすると、
$day[5] → 配列@dayの5番目の要素、すなわち「木」となるわけである。

最後の行は、上3行目の
$time = &jp_time;
に基づいて、return文で元に返している。