Another way to run applications instead of using exec or fork is to use expect; from the Expect module.
This is very useful for unruly programs that cause your Perl to hang.
I have also used open3 instead of fork / exec but am now currently converting open3 to expect. #Even though it only is available for linux it might be useful to you.
Everything I know is here
http://search.cpan.org/dist/Expect.pm/
Some code that uses this
|