インフォメーションBBS

[使い方] [タイトルのみ] [関連発言] [最新20発言] [過去ログ一覧]
0891 キャメル [RE] 2000/02/26 02:33 [修正]
RE3:open(IN,"+<$file")について...
#0888(matu氏)の書き込みを引用します:
>ちょっと本筋からそれてしまうのですが本(すぐに使えるPerl スクリプト〜)の
>6ページの解説によると「+>」と「+<」はともに「読み書き両用」となっているの
>ですが、機能の違いがなにか有るのでしょうか?

これは説明不足でした。同じ「読み書き両用」とはいっても、
"+>"は、既存のファイル内容をそのまま保存するのに対して、
"+<"は、オープンの時点でファイル内容をクリアするものです。

>前日の質問に補足をいたします。
>>   print IN $_ ;
>の部分を
>     print  $_ ;
>のように標準出力に出せば、期待通り
>aaa
>xxx
>ccc
>ddd
>となりますが、

あ、すみません。「print $_;」と見まちがえていました。
同じファイル(IN)に書き戻すのですね。

このように「ひとつのファイルを読みつつ同時に書き換える」という
処理は難しいと思ってください。もしそれをするなら、seek関数を使って、
(1)どの位置(何バイトめ)から読むか、
(2)どの位置に書き込むか
をいちいち指定しないといけません。

また、そのためには、1行のデータサイズを固定するなどの手法で、
書き込むデータが次に読むべきデータを上書きしない工夫も必用です。

実際に、同じファイルに対して、seek関数をつかわず、平行して「読み」と
「書き」をおこなった場合、結果はどうなるかわかりません。
バッファリングの状況によっては、1行めのデータが全行にコピーされる
場合があるかもしれませんし、ファイル内容が消える場合もあると思います。

#ところで、このBBSのスクリプト、バグってます(いまさら)
#「修正」を実行すると、「><」が「<」に化けてしまいます|
#あとで新しいスクリプトに入れ替えておかねば。></」が「<」に化けてしまいます|></」はともに「読み書き両用」となっているの>

レスポンスは付いていません

[トップページに戻る]管理人 : キャメル