※ ChatGPTを利用し、要約された質問です(原文:掲示板の書き込みを古い順に並べるには)
掲示板の書き込みを古い順に並べるには
このQ&Aのポイント
perl初心者のため、掲示板の書き込みを古い順に並べる方法を教えてください。
HTML以外の部分は改造できない掲示板のスクリプトで、書き込みを古い順に並べる方法を教えてほしいです。
掲示板の作り方を解説しているサイトからスクリプトを借りたが、書き込みが新着順に並んでしまうので、古い順に並べる方法が知りたいです。
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;
}
お礼
ありがとうございます。出来ました。