Aside from seconding the use of PerlMagick, the only other thing I can think of is putting $! in the "failed to open" line, so you can check the exact error reported by the open call.
I did some testing on my machine, and everything else in that snippet looks okay. (ImageMagick doesn't give me any output when I try that exact line, either.)
Maybe the whole process is chroot()ed? That's just a stab in the dark.