pipeを使ったプロセス間でのデータの入出力

back
pipe で open したハンドルに対して読み書きすればよい

pipe(READ, WRITE);
select((select(WRITE), $|=1)[0]);

if ($pid = fork) {
  # 親プロセス
  close WRITE;
  while (<READ>) {
    # 子プロセスの出力を読み込んで処理
    print;
  }
  exit;
}
elsif (defined $pid) {
  # 子プロセス
  print WRITE "foo\n";
  print WRITE "bar\n";
  print WRITE "baz\n";
  exit;
}

親と子、相互に入出力する場合は、2組の read/write ハンドルを用意すればよい

なお、出力はバッファリングされるため、select をつかって $| を真にして、
バッファリングしないようにした方が場合によっては良い。

back