perl スクリプトからコマンドの入力にデータを流して、そのコマンドの出力を(ファィルを経由せずに)スクリプトに取り込みたい場合どうするかというお話。要するにこんなふうにしたい:
print
[perl] --->>---[command]--+
| |
+-------<<-------------+
<>こんな感じにするといいみたい。
<>
[perl] IN --<<--------------+
[perl]-(fork)< |
[perl] OUT -->>--[command]--+
printコードはこんなの。
if (open(IN, "-|")) {
# fork して子プロセスの標準出力を IN に繋ぐ
$output = <IN>;
} else {
# 子プロセス。コマンドの標準入力に OUT を繋ぐ
open(OUT, "| command");
print OUT $input;
close(OUT); # 必ず閉じて
exit(); # 終了
}コマンドに渡すデータによっては、こんなのが簡単:
$output = `echo -n $input | command`;