問題は
unshift(@DATA,"$NO,$tm,$TITLE,$TEXT,$PASS,$IP\n");
とする前の@DATAの中身です。
1)
事前の@DATAが空の状態で
unshift(@DATA,"$NO,$tm,$TITLE,$TEXT,$PASS,$IP\n");
とすると、1行しかない@DATAが作られます。
1-1)
この状態で
open(FILE, ">sled/$log") or die("error :$!");
print FILE @DATA;
↑とすると、これはファイルの上書きなので
元のデータが消えて、1行だけのデータになってしまいます。
1-2)
これを、openで >>として
open(FILE, ">>sled/$loglog") or die("error :$!");
print FILE @DATA;
↑とすると、既存ファイルの後ろに追記を指定しているので
既存ファイルの最後に1行追加されます。
(下へ下へと追記されるファイル)
2)
いっぽう
@DATAに、既存のファイル内容が読み込まれた状態で
unshift(@DATA,"$NO,$tm,$TITLE,$TEXT,$PASS,$IP\n");
とすると、既存ファイルの内容の前に、一行が挿入された@DATAが作られます
2-1)
この状態で
open(FILE, ">sled/$log") or die("error :$!");
print FILE @DATA;
↑とすると、これは既存データの”上”に追加されたファイルが作られます。
(上へ上へ挿入)
2-2)
open(FILE, ">>sled/$loglog") or die("error :$!");
print FILE @DATA;
↑とすると、既存ファイルの後ろに追記なので
既存データ+追加される1行+もう一度既存データ
と多重データになってしまいます。
たぶん
test.cgiは、事前の@DATAが空なので 上の1-2)の下に下に追加
bbstest.cgiは、事前の@DATAにデータがあるので、上の 2-1)の上に上に挿入
の状態なのでしょう。
お礼
ありがとうございます! 解決できました!