socketpair($r_stdout, $w_stdout, AF_UNIX, SOCK_STREAM, PF_UNSPEC); socketpair($r_stderr, $w_stderr, AF_UNIX, SOCK_STREAM, PF_UNSPEC); if(fork()){ close $w_stdout; #read from $r_stdout etc }else{ my $so_fd=fileno($w_stdout); open STDOUT, ">&$so_fd"; exec('something') or die; }