アプリ版:「スタンプのみでお礼する」機能のリリースについて

WEB上でPerlCGIを稼働し、ファイル(file.dat)からデータを読み込み、
@line=(0001,0002,0003) とします。
このときファイルの中身は
0001
0002
0003
という風に改行されています。

そして、@lineをいろいろ操作し、最終的に
@newline=(0001,0003) とし、 (実際には各要素には改行がついています)
これを

open(OUT,">file.dat")
print OUT @newline;
close (OUT);

と言う風に書き込み処理しました。
すると、ファイルの中身はなぜか
0001
0003
0001
0002
0003
もしくは
0001
0003
00001
0001
0002
0003
となってしまいます。(この違いはいろいろ試しているうちに発生しました)
もちろん上書きオープンです。
試しに @newline を空にして書き込むとファイルは空になりました。

どう試してみても、新しいデータと古いデータが書き込まれてしまうのです。
場合によっては心当たりの無いデータまで・・・

書き込みの前後で@newlineを画面表示してみましたが、
書き込みの前も後も問題なく表示されています。
つまり、書き込まれたデータだけが異常なのです。

今まで、データの更新→書き込み というのを
いろいろやってきましたが、このような現象は初めてです。

原因として考えられることを教えてください。
よろしくお願いします。

A 回答 (1件)

これだとどうでしょうか?(確証はなくてすみませんが)



@newline = ("0001\n","0003\n");

$string_length = 0;
foreach $num (@newline)
{
$string_length += length ($num);
}


open (OUT,">file.dat");
seek (OUT,$string_length,0);
print OUT @newline;
close (OUT);
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!