Use IO:Handle; pipe(READFROMCHILD, WRITETOPARENT); pipe(READFROMPARENT, WRITETOCHILD); READFROMCHILD->autoflush(1); READFROMPARENT->autoflush(1); WRITETOCHILD->autoflush(1); WRITETOPARENT->autoflush(1); if ($this = fork) { close READFROMPARENT; close WRITETOPARENT; print WRITETOCHILD "The parent process says hello"; $thisdata = ; print "The parent process read $thisdata"; close READFROMCHILD; close WRITETOCHILD; waitpid(-1, 0); } else { close READFROMCHILD; close WRITETOCHILD; $thisdata = ; print "The child process read $thisdata"; print WRITETOPARENT "The child process says hello"; close READFROMPARENT; close WRITETOPARENT; exit; }