This week one of my standard perl [Strawberry perl 5, version 32, subversion 1 (v5.32.1) built for MSWin32-x64-multi-thread] scripts started failing. I tracked it down to a failing backtick operation.
Investigation showed that all the system-type calls, backtick, qx, pipe open, are failing. I tried building a debug version of perl, and even that fails, as the build process uses miniperl, which has the same problem.
..\miniperl.exe -I..\lib ..\make_ext.pl "MAKE=nmake -nologo" --dir=..\cpan --dir=..\dist --dir=..\ext --nonxs
Can't spawn "cmd.exe": No such file or directory at ..\make_ext.pl line 580.
Can't spawn "cmd.exe": No such file or directory at ..\make_ext.pl line 582.
Unsuccessful make(dist/if): code=65280 at ..\make_ext.pl line 584.
I tried defining PERL5SHELL (full path to cmd, pwsh in place of cmd), turning off malware protection, everything I could think of reverting.
So, the actual question: Does anyone have a suggestion for how I can track this down? It was working on Thursday, and there have been no system updates since then [OS version 10.0.22000].
CodePudding user response:
I ran into the same problem starting a couple of weeks ago. I use ActiveState perl, so I tried installing Strawberry perl, but got the same problem w/ Strawberry. I also saw the zero length files getting created. This is happening on multiple machines. One is Winver 1909 and the other is 21H2.
A workaround is to use the full path for the program you want to run.
You can also insert the full path to cmd.exe ahead of the program. Try this:
$temp = `$ENV{COMSPEC} /c date /T`;
print "\$temp = $temp";
I've been assuming this was due to a W10 security update, but I really do not know the cause. I am going to write a sub called Backticks()
that I could use like this:
print Backticks('date /T');
sub Backticks
would return $ENV{COMSPEC} /c @_
.
This is a hack, but at this point I do not know what else to do.