I think something is corrupting/resetting your last error. It is common problem in Perl Win32 code. Do not use a ::FormatMessage. Add a "use Win32;" at the top of your script to prevent a silent require/import (see http://perl5.git.perl.org/perl.git/blob/HEAD:/ext/Win32CORE/Win32CORE.c#l25) which might be messing things up even though it isn't supposed to.