my ($pread, $cwrite, $cread, $pwrite, $cpid); pipe $pread, $cwrite; pipe $cread, $pwrite; select((select($pwrite),$|=1)[0]); # added { $cpid = fork; defined $cpid or die $!; last if $cpid; close $pwrite or die $!; close $pread or die $!; open STDIN, '<&'.fileno($cread) or die $!; open STDOUT, '>&'.fileno($cwrite) or die $!; $|=1; # added exec $cmd; die $!; } close $cwrite or die $!; close $cread or die $!; # do your stuff