記録される最大記事数を指定する

記録される最大記事数を指定する

これまでで作成した掲示板は、投稿されたすべての記事が保存されました。ですがそれではログファイルのサイズがいつかは膨大なものになってしまいます。

今回は、指定した件数以上のログは自動的に削除されるように改造したいと思います。

投稿内容の記録処理は

if (open(FH, "bbs.txt")) {
  @file = <FH>;
  close(FH);

bbs.txt の内容を @file に読み込み

unshift(@file, "$in{'handle'}\t$in{'message'}\t$date\n");

で今回の投稿内容を追加し

if (open(FH, ">bbs.txt")) {
  print FH @file;
  close(FH);

で新しく作成した投稿データを bbs.txt に保存しました。

一定件数以上を自動的に削除する方法はいくつかありますが、手軽なのは splice 関数を使用する方法です。splice は以下の書式で、配列内のデータを指定した件数以上のデータを削除してくれます。

splice(配列名, 削除の開始位置);

具体的には、以下のようなプログラムになります。

splice(@file, 30);

この場合、@file 内の30件目以降の値を削除します。ですから、上の行をファイルへの記録処理の直前に挿入すればOKです。