本周我的一個標準 perl [Strawberry perl 5, version 32, subversion 1 (v5.32.1) built for MSWin32-x64-multi-thread] 腳本開始失敗。我追蹤到失敗的反引號操作。
調查顯示,所有系統型別的呼叫、反引號、qx、管道打開都失敗了。我嘗試構建 perl 的除錯版本,甚至失敗,因為構建程序使用 miniperl,它有同樣的問題。
..\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.
不成功的 make(dist/if): code=65280 at ..\make_ext.pl 第 584 行。
我嘗試定義 PERL5SHELL(cmd 的完整路徑,pwsh 代替 cmd),關閉惡意軟體保護,我能想到的一切都恢復了。
所以,實際的問題是:有人對我如何追蹤這個有建議嗎?它在星期四作業,從那時起就沒有系統更新 [OS 版本 10.0.22000]。
uj5u.com熱心網友回復:
幾周前我遇到了同樣的問題。我使用 ActiveState perl,所以我嘗試安裝 Strawberry perl,但遇到了與 Strawberry 相同的問題。我還看到創建了零長度檔案。這發生在多臺機器上。一個是Winver 1909,另一個是21H2。一種解決方法是使用您要運行的程式的完整路徑。
您還可以在程式前面插入 cmd.exe 的完整路徑。嘗試這個:
$temp = `$ENV{COMSPEC} /c date /T`;
print "\$temp = $temp";
我一直認為這是由于 W10 安全更新,但我真的不知道原因。我將撰寫一個子程式Backticks(),我可以像這樣使用它:
print Backticks('date /T');
subBackticks會回傳$ENV{COMSPEC} /c @_。這是一個 hack,但此時我不知道還能做什么。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/486985.html
