• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:open関数を +> で用いても。。。)

open関数と +> 記号の使い方とは?

このQ&Aのポイント
  • open関数を +> で用いると、ファイルを開く際に追加書き込みはできないが、読み取り、書き込み、新規作成、上書きは可能です。
  • しかし、実際に使ってみると読み出し機能がうまく動作しないことがあります。
  • この問題の原因と解決方法について紹介します。

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

「モノの本」とやらの記述で疑問が湧いたら、まずはマニュアルを良くよみましょう。 http://perldoc.jp/func/open > MODE が > の場合、ファイルは出力用に開かれ、既にファイルが ある場合は切り詰められ(上書きされ)、ない場合は新しく作られます。 > ファイルに読み込みアクセスと書き込みアクセスの両方をしたいことを示すために、 > や < の前に + を付けることができます: (略)-- +> モードはまずファイルを上書きします。

makoji
質問者

お礼

ありがとうございます。 おかげさまで +>だけでなく、+<、>>、+>> の違いもよく理解できました。 どちらも貴重なアドバイスになったのですが、ベストアンサーは一つしかつけられないので、文字数で、No.1の方とさせていただきます。 ありがとうございました。

makoji
質問者

補足

ありがとうございます。 これは如何でしょうか。 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;

その他の回答 (1)

  • t-okura
  • ベストアンサー率75% (253/335)
回答No.2

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

関連するQ&A