You may also want to check out IPC::Shareable
if your system
supports shared memory. I cannot claim to be conversant in
either module, but it should be a fair fit for what you are trying to do. It would also eliminate the need to use pipes.
If you decide not to do this, I am uncertain if you really need two way pipes. It seems the communication needs to flow only from child to parent. You can do this with
open KID, "-|";
which will fork a child process off and connect the child's STDOUT to the named file handles.