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 をつかって $| を真にして、 バッファリングしないようにした方が場合によっては良い。