OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

Perlでファイル書き込みの際の不思議

  • すぐに回答を!
  • 質問No.219929
  • 閲覧数42
  • ありがとう数0
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 31% (23/72)

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を画面表示してみましたが、
書き込みの前も後も問題なく表示されています。
つまり、書き込まれたデータだけが異常なのです。

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

原因として考えられることを教えてください。
よろしくお願いします。
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.1
レベル10

ベストアンサー率 21% (28/132)

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

@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);
-PR-
-PR-
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ