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`;