- ベストアンサー
他のプログラムとのデータ転送
A、Bという二つのプログラムがあるとします。 Aで入力してもらったデータをBへ送り、Bでその受け取ったデータの処理し、処理したデータをAへ送り返し、Aでその処理したデータを表示させるというプログラムを作ろうとしているところです。 このデータというのは、文字列で構いません。 行う処理は簡単なものなので自力でできますが、どのようにして他のプログラムにデータを受け渡せばよいのか分かりかねます。 どなたかご存じの方がいらっしゃいましたら、ご教授願います。 よろしくお願いします。 ↓(入力) A →(データ)→ B A ←(処理後のデータ)← B ↓(出力) イメージは、こんな感じです。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
openを使う時に、パイプ("-")と組み合わせることで、他のプログラムの出力の読み取りや、そのプログラムへの入力を行うことができます。 ●Bにデータを渡す <"A"の側> $program_name = 'perl Bprogram.pl'; open FH, "|-", $program_name or die "cannot run sub program: $!"; print FH "渡したいデータ"; close FH; <"B"の側> @received_data = <>; ●Bからデータを受ける <"A"の側> $program_name = 'perl Bprogram.pl'; open FH, "-|", $program_name or die "cannot run sub program: $!"; @recieved_data = <FH>; close FH; <"B"の側> print "送りたいデータ";
その他の回答 (4)
- t140
- ベストアンサー率39% (59/150)
AもBもPerlならAプログラム内で入力されたデータをグローバル変数にセット してBをrequireすればいいかと
- Tacosan
- ベストアンサー率23% (3656/15482)
へ~, open2 なんてあるんだ~. perldoc が使えれば, perldoc perlipc をどうぞ.
- rafysta
- ベストアンサー率45% (24/53)
パイプ("-") ↓ パイプ("|") 間違えました
もしBが、Aと同時実行されている別タスクであれば、受け渡し用のテンポラリファイルを作るしかないかもしれません。 ですがBが、Aによって起動されるのであれば、起動時の引数として渡せばいいと思います。
お礼
素早い回答ありがとうございました。
補足
Bは、本来はサーバ上で24時間常駐しているプログラムです。具体的には、コンテンツ変換プログラムです。 ですので、本来の目的は、入力してもらったデータ(コンテンツ)をBへ受け渡し、変換したコンテンツをBから受け取り、Aで表示させるというプログラムを作りたいのです。 さすがに、いきなりは難しいと思ったので、最初は質問文で上述したような簡単なものを作ってみようと思いました。