The above is a hack for emulating & on systems that do not support it. It isn't well documented, but if you browse [link|http://www.perldoc.com/perl5.8.4/pod/perlport.html#Alphabetical-Listing-of-Perl-Functions|the guts] of perlport for its documentation of system you should find it.
I have also used IPC::Open3 and friends with varying degrees of success. I've had it work. I've had it fail. I'm not entirely sure what the boundary is between what works and what does not. It likely has improved since I had to deal with it. Try it.
If you still run into trouble, a root cause may be that on Win32 fork() and similar things sometimes get emulated using multi-threading. Which works fine as long as you are dealing with pure Perl, but then when you try to exec you've got a problem. If you really can't do what you want, the Perl that comes with cygwin may work better.
Cheers,
Ben