• ベストアンサー

STDINから何度も読み込むことはできますか?

Perlはかじっている程度の者です。 STDINから全てのデータを read( STDIN, $strRead, $ENV{CONTENT_LENGTH} ); として読み込んで、次に read( STDIN, $strRead, $ENV{CONTENT_LENGTH} ); とすると、もう読み込めませんよね。 なので、 seek( STDIN, 0, 0 ); を毎回呼び出して、ポントを先頭にもっていってから読もうとしたのですが・・だめでした。 そこで質問なのですが、CGIプログラムでSTDINから何度も重複してデータを読み込む方法はありませんか?

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

STDIN からは、基本的にclose しなければ、何度でも読み込むことができます。 多分、質問者の仰っているのは、既に読み込んだデータをもう一度読み直せるかということかと思いますが、それはできません。 $strRead に読み込んであるんだからそれを再利用すればいいことだと思います。(あるいは、もう一度読み直すような処理が必要なら、ファイルなどに取って置いてそれを読み直すとか)

ggaogg
質問者

お礼

やはり無理ですか。 perlのスパゲッティソースを解消しようと思い、STDINから読み込むような処理を関数でまとめようと思ったのですが、そうすると処理が隠蔽されるため、そんな仕様を意識せずに関数を何度も呼び出して使うということが望まれます。 そのときにSTDINから1度読み込めてもその後は読み込めないとなると使い勝手が非常に悪いので、なんとかならないかと思った次第です。 しかしperlにはstatic宣言して静的メモリを確保するというようなことができません。 そういう面ではperlってちょっと使いづらい面もありますよね。。 STDINから何度も同じものを読み込むという手段は諦めて、何か他の方法を考えることにします。 ありがとうございました。

関連するQ&A