Using Win32::GetShortPathName() is a band-aid solution, but since this problem only seems to come up rarely and then only on Windows it should hold. I'd rather either do the shell escaping or use something that doesn't invoke a shell.
Cross-platform shell escaping is a ROYAL PAIN IN THE ASS as I'm finding out in MakeMaker. This is an old, old, old problem which was simply left to rot because its so difficult to get right. ActiveState simply worked around the problem by moving the default install location from C:\Program Files\Perl to C:\Perl.
Using open | doesn't please me but it seems to be the only cross-platform, backwards compatible thing to do. Can't use any whizz-bang 5.8.0 features, this thing has to work back to 5.4.0.
Michael G Schwern Just Another Stupid Consultant