FYI, terminology-wise, what you're talking about is often called a "co-process". A great tool for working with co-processes is IPC::Run. It can work in a "wait for the other process to finish" mode (just run the command), or in a mode that allows you to start up a co-process, and pump it along in the controller process.
wow I sure found a lot of documentation on that IPC::Run module, but I didn't see exactly what I needed. Maybe what I need is hidden amongst all the complicated examples?