in reply to How to deal with a forked proces that is waiting for user input?
I have used IPC::Run to call other programs and monitor their output and provide input to them with good success.
Another option that I have used is POE with POE::Wheel::Run.