• ベストアンサー

Perl変数から外部プログラムの標準入力へ

Perlのプログラム内部で保持している変数の値をシェルコマンドに与える方法はありますか? $value=12345; や、 @array=('ONE', 'TWO', 'THREE'); などの変数の値を外部コマンド(標準入力を受けることができるコマンド)に渡したいのです。 方法がわからないので、現在は一度ファイルに書き出して、 system('cat file.name | command'); のようにして渡しています。なんか賢くない書き方のような気がするのですが。

質問者が選んだベストアンサー

  • ベストアンサー
  • zebedeer
  • ベストアンサー率66% (80/121)
回答No.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.html#Bidirectional_Communication_with
ssaass
質問者

お礼

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

その他の回答 (1)

  • angband
  • ベストアンサー率51% (86/168)
回答No.1

open関数で、commandへの出力をファイルとして開けば いいのではないでしょうか。 open(MYCMD, "| /your/command"); print MYCMD $value;

ssaass
質問者

お礼

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

ssaass
質問者

補足

ありがとうございます。 それでは、標準入力で受けて標準出力に書き出す外部コマンドがあり,Perl内部でそれを利用したい場合、 open(FILE, "| /my/command |"); print FILE $value; # commandへの入力 while(<FILE>){ # commandの出力を利用 } でファイルと同じように扱えますか?試したところどうもうまくいかないのですが。