I kinda edited my last post, to give you a chance to do some diagnostics.
The 'missing' part of my post is this. I suspect that on Windows, scripts are not considered executables. If you look at some of those examples, you'll see that the Windows systems have a hard time invoking batch files (they are a script also). I have a pretty good concept that for the Windows OS, an executable is defined as an .exe or .com file (and for our purposes that means .exe). In fact, that appears to be what your tests show - executables work, scripts don't. Imagick (on windows) is a DLL (dynamic link library), which is an extension of a running executable -- so its a bit different, the executable has already been invoked.
So I think what may be needed is the backticks/shell_exec method. This can return the output of an external command to the PHP process. I think the code you have written actually tries to run the script
external to the PHP process (if it were to run successfully), The STDOUT is most likely suppressed, in fact I think you might have to write it (the output of the Perl script) to a file to get the invoked script to run. If you do some research, I think you will find that PHP requires an external command to complete in the background (i.e) STDOUT is not available (only one process can have control of a stream like STDOUT/STDIN/STDERR at a time).
These are all suppositions, as I don't 100% know what you were trying to achieve. IF it was to direct the output of the Perl script back into the PHP process (for instance to display/print it), I don't think the 'exec' method will work. This is an expert level PHP question, and I'd give a whack at some PHP forums for a better answer.
I'm still going to look in my other book of tricks, I think there's another way to do this with Java/XML.
Good Luck.