ファイルの読み書き

[上に] [前に] [次に]
素人 2000/05/25(木) 23:29:06
最近perlを始めた者です。

ファイルの読み書きなのですが、同じファイルから同時に読み込む
という処理を見たことが無いのですが、メモリをたくさん消費する
とか、負荷が大きいとか、それ以前の問題があるのでしょうか?

例えば、ファイルの先頭にデータを追加する場合、事前に何らかの
方法でロックをかけておいて、

$value = 'hogehoge';

open( DB, "<$file" ) or die;
open( LOG, "+<$file" ) or die;
    $tmp = <DB>;
    seek( LOG, 0, 0 );
    print LOG "$value\n$tmp";
    while ( <DB> ) {
        print LOG "$_";
    }
close( LOG );
close( DB );

このような処理をする場合などです。(下手ですが)

やはり、普通に、@logdata = <IN> などとやってから、先頭に追加
した方が、よいのでしょうか?

謎の人 2000/05/26(金) 09:37:49
>普通に、@logdata = <IN> などとやってから〜
確かに、処理速度はメモリなので速くなりますが、資源が無い時にコケます。
しかし、捨て難いので、evalでエラーチェックして、エラー時は、行単位の
処理にするとか。

evalについては、ここで検索するとゴロゴロ出てきます。

バギンズ 2000/05/26(金) 11:55:32
メモリに読み込めない場合ですが、
例え1レコードの長さが同じでも(違う場合は問題外)
レコードを挿入するのに1つのファイルで行なうのは
あまりよくないと思います。
処理の途中で何らかの原因でこけたときにはアウトですしね。

一旦テンポラリファイルに書き出してから、
古いファイルを削除して、テンポラリファイルをリネーム
するようにした方がいいと思います。

素人 2000/05/26(金) 16:36:18
[[解決]]
謎の人さん、バギンズさん、大変参考になりました。
いろいろやってみることにします。ありがとうございました。

[上に] [前に] [次に]