プロが教えるわが家の防犯対策術!

Perlのプログラム内部で保持している変数の値をシェルコマンドに与える方法はありますか?

$value=12345;
や、
@array=('ONE', 'TWO', 'THREE');
などの変数の値を外部コマンド(標準入力を受けることができるコマンド)に渡したいのです。

方法がわからないので、現在は一度ファイルに書き出して、
system('cat file.name | command');
のようにして渡しています。なんか賢くない書き方のような気がするのですが。

A 回答 (2件)

> system('cat file.name | command');



こうするくらいなら、こうのほうがましかも。
system("command $value");
# or `command $value`

ただし、どれも汚れた値は扱えない。
(open & printだとどうなんだろう?sh使ってないからok?)

>open(FILE, "| /my/command |");

perlipc(Perl のプロセス間通信)の日本語訳を参考URLに上げておきます。
(双方向通信はやったこと無いけど、socketpairが無難なのかな?)

参考URL:http://www.kt.rim.or.jp/~kbk/perl5.005/perlipc.h …
    • good
    • 0
この回答へのお礼

ありがとうございます。
やろうとしていたことがプロセス間の通信にあたり、まさにそのことを記述したドキュメントが存在するということすらわかっていなかったので、助かりました。

これから勉強してみます。

お礼日時:2004/05/11 08:24

open関数で、commandへの出力をファイルとして開けば


いいのではないでしょうか。

open(MYCMD, "| /your/command");
print MYCMD $value;

この回答への補足

ありがとうございます。

それでは、標準入力で受けて標準出力に書き出す外部コマンドがあり,Perl内部でそれを利用したい場合、

open(FILE, "| /my/command |");
print FILE $value; # commandへの入力
while(<FILE>){
# commandの出力を利用
}

でファイルと同じように扱えますか?試したところどうもうまくいかないのですが。

補足日時:2004/05/10 16:00
    • good
    • 0
この回答へのお礼

入力側のパイプと出力側のパイプは同時には使えないという記述を見つけました。こういうことを実現したい場合、普通どうするんでしょうか?

お礼日時:2004/05/10 16:07

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