IPC::Run is great for working with the output of processes in a non-blocking way. If you want something fancier, you can use POE::Component::Child, which will let you use POE to work with child processes and process the output with event handlers.
I've never actually heard of IPC::Run, but it does indeed look like a possible way to go. I am aware that what I want to do is much more trivial in POE. I need to actually get around to learning and using it. :)