cgiで標準入力、出力を使用を使用するには?

[上に] [前に] [次に]
さかべ 1999/10/26(火) 20:18:10
A.cgi、B.plのCGI、plがあったとします。A.cgiの中でB.pl
を呼びB.plで処理した結果を、標準入力を使用しA.cgiに渡し
たいのですが。過去のレスに似たようなのがあったのですが
うまく行きません。また、やり方に不安があります。

まず、A.cgiからB.plを呼ぶ方法は以下です。ただ、呼ぶだけです。値は渡さない。
'perl /export/home/kgd/cgi-bin/his_emu.pl';

B.cgの処理結果をA.cgiに標準入力を使用し以下の様にしてます。
open(FD,"| /usr/local/bin/perl /export/home/kgd/cgi-bin/history_e.cgi");
print FD $data;
close FD;

A.cgiのB.plからのデータの受け取りは(標準出力を使用)
open(FD,"/export/home/kgd/cgi-bin/his_emu.cgi|");

です。
B.plの呼び方や、値の渡し方、受け取り方はどの様にしたら
いいのでしょうか?
よろしく、おねがいします。

ふじ 1999/10/26(火) 22:02:27
a.cgi が history_e.cgi で、b.pl が his_emu.pl なんですよね?

であれば、
b.pl の方では結果を「標準出力」に書き出します。
単に、
print $data;
とか。

>open(FD,"| /usr/local/bin/perl /export/home/kgd/cgi-bin/history_e.cgi");
こうすると、呼ばれたのとは別のプロセスの history_e.cgi
を起動して、そっちに値を渡しちゃいますので。

つまり、a.cgi の方で、
open(FD,"/export/home/kgd/cgi-bin/his_emu.pl |");
@return = <FD>;
close FD;

b.pl の方で、
print $data;
とすればよいのでは。

さかべ 1999/10/27(水) 10:42:04
ふじさん返信ありがとうございます。
a.cgi が history_e.cgi で、b.pl が his_emu.pl です。
すみません、説明不足でした。

open(FD,"/export/home/kgd/cgi-bin/his_emu.pl |");
@return = <FD>;
close FD;

の部分ですが、以下のようにしてはだめなのでしょうか?

open(FD,"/export/home/kgd/cgi-bin/his_emu.cgi|");
while(<FD>) {
 受け取った後の処理をする。
}

おねがいします。

さかべ 1999/10/27(水) 11:14:24
間違いがあったので訂正します。
his_emu.cgiとなっていました。
open(FD,"/export/home/kgd/cgi-bin/his_emu.pl|");
while(<FD>) {
 受け取った後の処理をする。
}

また、cgiから.plのファイルを呼ぶときはは、
'perl /export/home/kgd/cgi-bin/his_emu.pl';
でいいのでしょうか?

ふじ 1999/10/27(水) 14:31:16
一度に配列に読み込まないで、while ループで一行づつ読んで
処理しても、もちろんOKです。

>また、cgiから.plのファイルを呼ぶときはは、
>'perl /export/home/kgd/cgi-bin/his_emu.pl';
>でいいのでしょうか?
open(FD,"/export/home/kgd/cgi-bin/his_emu.pl|");
というのは、
/export/home/kgd/cgi-bin/his_emu.pl
を起動してそれが標準出力に吐き出すものをFDというファイルハンドル
で読み込めるようにする、という意味です。
#つまり、ここが his_emu.pl を呼んでいる部分なのです。
#よって、 'perl /export/home/kgd/cgi-bin/his_emu.pl'; は不要。

あ、his_emu.pl のパーミッションを実行可能にしておくことを
お忘れなく。

さかべ 1999/10/27(水) 15:41:20
[[解決]]
ふじさんありがとうございました。
理解しました(解決しました)。
かなり、間違って理解(?)していました。

これからも、よろしくお願いします。

[上に] [前に] [次に]