$pid = open(KID_TO_WRITE, "|-"); if ($pid) { # parent print KID_TO_WRITE @some_data; close(KID_TO_WRITE) || warn "kid exited $?"; } else { # child while () { ... print ; # child's STDIN is parent's KID } exit; # don't forget this }