- ベストアンサー
Perl変数から外部プログラムの標準入力へ
Perlのプログラム内部で保持している変数の値をシェルコマンドに与える方法はありますか? $value=12345; や、 @array=('ONE', 'TWO', 'THREE'); などの変数の値を外部コマンド(標準入力を受けることができるコマンド)に渡したいのです。 方法がわからないので、現在は一度ファイルに書き出して、 system('cat file.name | command'); のようにして渡しています。なんか賢くない書き方のような気がするのですが。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> system('cat file.name | command'); こうするくらいなら、こうのほうがましかも。 system("command $value"); # or `command $value` ただし、どれも汚れた値は扱えない。 (open & printだとどうなんだろう?sh使ってないからok?) >open(FILE, "| /my/command |"); perlipc(Perl のプロセス間通信)の日本語訳を参考URLに上げておきます。 (双方向通信はやったこと無いけど、socketpairが無難なのかな?)
その他の回答 (1)
- angband
- ベストアンサー率51% (86/168)
open関数で、commandへの出力をファイルとして開けば いいのではないでしょうか。 open(MYCMD, "| /your/command"); print MYCMD $value;
お礼
入力側のパイプと出力側のパイプは同時には使えないという記述を見つけました。こういうことを実現したい場合、普通どうするんでしょうか?
補足
ありがとうございます。 それでは、標準入力で受けて標準出力に書き出す外部コマンドがあり,Perl内部でそれを利用したい場合、 open(FILE, "| /my/command |"); print FILE $value; # commandへの入力 while(<FILE>){ # commandの出力を利用 } でファイルと同じように扱えますか?試したところどうもうまくいかないのですが。
お礼
ありがとうございます。 やろうとしていたことがプロセス間の通信にあたり、まさにそのことを記述したドキュメントが存在するということすらわかっていなかったので、助かりました。 これから勉強してみます。