電子書籍の厳選無料作品が豊富!

モノの本によるとファイルを開く際にファイル入出力記号を +> にすると、追加書き込みは出来ないものの、読み取り、書き込み、新規作成、上書きが出来るとのこと。

ファイルからデータを読み込んで、読み込んだ内容を加工して、すぐにファイルに保存する用途に最適だなと思いましたが、実際に使ってみると読み出しをしてくれません。

何がいけないのでしょうか。


my @s;
my @t=('a','b');

open IO,'+>test.txt';
@s=<IO>;
print "\$@の要素数は ".@s."個\n";

for(@t) {
print IO $_."\n";
}
close IO;

A 回答 (2件)

「モノの本」とやらの記述で疑問が湧いたら、まずはマニュアルを良くよみましょう。



http://perldoc.jp/func/open

> MODE が > の場合、ファイルは出力用に開かれ、既にファイルが ある場合は切り詰められ(上書きされ)、ない場合は新しく作られます。

> ファイルに読み込みアクセスと書き込みアクセスの両方をしたいことを示すために、 > や < の前に + を付けることができます: (略)-- +> モードはまずファイルを上書きします。

この回答への補足

ありがとうございます。

これは如何でしょうか。

test.txtを開いてみると、確かに@tの内容で上書きされています。

しかしそれを@sが読み込んでくれません。

<IO>がファイル読み込み時のデータを意味するなら、test.txtは上書きされるのですから、@sに何も入っていないのは当然です。しかしそれなら +> は > とまるで変わらないのではないでしょうか。


my @s;
my @t=('a','b');

open IO,'+>test.txt';

for(@t) {
print IO $_."\n";
}

@s=<IO>;
print "\$@の要素数は ".@s."個\n";

close IO;

補足日時:2011/11/18 20:32
    • good
    • 0
この回答へのお礼

ありがとうございます。

おかげさまで +>だけでなく、+<、>>、+>> の違いもよく理解できました。

どちらも貴重なアドバイスになったのですが、ベストアンサーは一つしかつけられないので、文字数で、No.1の方とさせていただきます。

ありがとうございました。

お礼日時:2011/11/18 21:45

ファイルの読み出し位置を先頭に巻き戻しましょう。



seek IO, 0, 0;
    • good
    • 0

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