WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:perl cgi STDOUTを変数で受取るには

0:[投稿] 芙蓉 [2006/03/24 11:27 ] [環境:w2k ie6 bsd Apache perl5.8]

いつも大変お世話になり感謝しております、再度のお願いですが
新規のcgiを書くのに、既存のcgiを再利用するため
$buf=`perl xx.cgi?xxx`;
としたいのですが美しくありません。
パイプの用法が良く解らないのですが、pipe()、select()、catコマンドなどを使って
STDOUTを変数で受取る方法を教えて下さい。


1:[回答] B-Cus [2006/03/24 12:22 ]

http://www.kt.rim.or.jp/~kbk/perl5.005/perlipc.html
 Safe Pipe Opens
あたりや、IPC::Open2 のくだりを読んでください。


2:[回答] 芙蓉 [2006/03/25 20:42 ][URL]

B-Cusさん、貴重なご示唆ありがとうございました
> Safe Pipe Opens
>あたりや、IPC::Open2 のくだりを読んでください。
らくだ青本にもあった同様の記述を見ると
プロセス間通信、パイプオープンはやり方次第でエラーを起こし易いとか、
例示のスクリプトに習っていろいろ試して見ましたが、どうしても戻ってきません、
デッドロックというのか良く分りませんが、fork()、パイプSIGなどなど難解なunix
の知識が足らないので、今しばらく勉強してから再度ご教示お願いにあがります。


3:[完了] 芙蓉 [2006/03/29 07:26 ][URL]

斎藤靖他共著、新Perlの国へ..の例題を使ってまあまあ美しくできました、
簡単に直列処理すればと思って混乱しておりました。Open2は100%成功、成功
率と$|=1 の要否は不明です。IPCは一寸難かしそうですが、応用の機会があれ
ば役に立ちそうですね。度々のご教示有難うございました
use IPC::Open2;
until(open2(In,Out,"cat")){die "can't Open2" if($cnt++==10); sleep 1;}
select(Out);                        # $|=1;
%ENV=(REQUEST_METHOD=>"GET",QUERY_STRING=>"xxx");    #必要に応じて
require "xx.cgi";
close Out; read In,$buf,(-s "xx.cgi"); select(STDOUT);

回答(必須): 状態:

お名前(必須):

URL:




[戻る]