掲示板の書き込みを古い順に並べるには
perlはかなり初心者です。この前、掲示板の作り方を解説しているサイト様でスクリプトをお借りしていじってみました。解説がところどころ書いてあるので構造は大体理解できましたが、HTML以外のところは全然改造はできません。この掲示板は、書き込みが新着順に上から並ぶのですが、古い順に上から並べるにはどこをどうすればよいのでしょう?どなたかお願いします。
require "cgi-lib.pl";
print "Content-type: text/html; charset=Shift_JIS\n\n";
# フォーム部分を表示する
print <<EOL;
ここはフォームのHTMLを書きました
EOL
&ReadParse(*form);
# フォームの値を取得
$namae = $form{"namae"};
$message = $form{"message"};
# ログファイル読み込み
open(IN, "bbs.txt");
@log = <IN>;
close(IN);
# メッセージが入力されているときは書き込み処理を行なう
if ($message ne "") {
# タグの無効化
&deltag($namae);
&deltag($message);
# 改行を<br>に変換
$message =~ s/\r\n/<br>/g; # Windows系(\r\n)
$message =~ s/\r/<br>/g; # Mac系(\r)
$message =~ s/\n/<br>/g; # UNIX系(\n)
# ログ先頭に書き込み内容を格納
unshift @log, "$namae\t$message\n";
# ログファイルにロックをかけて書き込み
open(OUT, "+< bbs.txt");
flock(OUT, 2);
truncate(OUT, 0);
seek(OUT, 0, 0);
print OUT @log;
close(OUT);
}
# ログ表示
foreach $data (@log) {
chop $data;
($namae,$message) = split(/\t/, $data);
print <<EOL;
<br><br>$namae<br>$message
EOL
}
print <<EOL;
</body>
</html>
EOL
# タグを除去するサブルーチン
sub deltag {
$_[0] =~ s/</</g;
$_[0] =~ s/>/>/g;
}
お礼
ご指導くださいまして、どうもありがとうございます。 Kirishima様や他の方たちのご説明から判断して、 $message =~ s/\r\n/<br \/>/g; $message =~ s/\r/<br \/>/g; $message =~ s/\n/<br \/>/g; の3行で記述したほうが無難な気がしますね。 ご質問したソースは「CGI/Perl Handbook」の掲示板ソースにありますが、 間違い又は不十分なのですね。 Kentさんの本には、ご説明のソースが載っていました。 ほぼ同じ掲示板でも記述の仕方がいろいろあり、本当に困ってしまいますね。 また機会がありましたら、ご指導いただきたいと思います。 どうもありがとうございました。