More on point of your earlier post, here's what is going on. Some programs (misguidedly, IMHO) attempt to enforce what their author considers "security" by reading or writing only to the controlling terminal. The idea being that it will somehow prevent input and output from being redirected (or intercepted), and that this is desirable. It doesn't and it isn't.
To get around this, you need to change the controlling terminal from an existing device to your in/out/err filehandles. IO::Pty has a nice little method called make_slave_controlling_terminal(), which will take care of the necessary setsid() and filehandle hokey-pokey. To be completely lazy, you might want to look at the try script that comes with it (and basically does exactly what you want -- runs another program and logs the output).
The intelligent reader will judge for himself. Without examining the facts fully and fairly, there is no way of knowing whether vox populi is really vox dei, or merely vox asinorum. — Cyrus H. Gordon