重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

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

Perlはかじっている程度の者です。

STDINから全てのデータを
read( STDIN, $strRead, $ENV{CONTENT_LENGTH} );
として読み込んで、次に
read( STDIN, $strRead, $ENV{CONTENT_LENGTH} );
とすると、もう読み込めませんよね。

なので、
seek( STDIN, 0, 0 );
を毎回呼び出して、ポントを先頭にもっていってから読もうとしたのですが・・だめでした。

そこで質問なのですが、CGIプログラムでSTDINから何度も重複してデータを読み込む方法はありませんか?

A 回答 (1件)

STDIN からは、基本的にclose しなければ、何度でも読み込むことができます。


多分、質問者の仰っているのは、既に読み込んだデータをもう一度読み直せるかということかと思いますが、それはできません。
$strRead に読み込んであるんだからそれを再利用すればいいことだと思います。(あるいは、もう一度読み直すような処理が必要なら、ファイルなどに取って置いてそれを読み直すとか)
    • good
    • 0
この回答へのお礼

やはり無理ですか。

perlのスパゲッティソースを解消しようと思い、STDINから読み込むような処理を関数でまとめようと思ったのですが、そうすると処理が隠蔽されるため、そんな仕様を意識せずに関数を何度も呼び出して使うということが望まれます。

そのときにSTDINから1度読み込めてもその後は読み込めないとなると使い勝手が非常に悪いので、なんとかならないかと思った次第です。

しかしperlにはstatic宣言して静的メモリを確保するというようなことができません。
そういう面ではperlってちょっと使いづらい面もありますよね。。

STDINから何度も同じものを読み込むという手段は諦めて、何か他の方法を考えることにします。
ありがとうございました。

お礼日時:2006/05/15 00:02

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