Windows
Windows 上“call perl script.pl”與“call script.pl”之間的區別
在 Windows 伺服器上(我測試了 2008 R2 和 2012 R2),我們注意到從批處理呼叫的 Perl 腳本的執行有不同的行為。
考慮如下原始批處理文件:
:beginlbl call path\script.pl goto :beginlbl
遲早(有時在執行數百次後僅執行幾次腳本後)會出現錯誤消息: “Windows 無法訪問指定的設備、路徑或文件。您可能沒有適當的權限來訪問該項目。”
如果將第二行程式碼修改為如下所示:
call perl path\script.pl
(注意腳本前的執行檔名。)腳本將永遠執行而不會出現問題。
在上述兩種情況下,Windows 的執行方式有何不同?
使用文件關聯會通過一個 shell 程序來評估文件類型(副檔名)並啟動適當的程序。你可能壓倒了這一點。這類似於呼叫 .txt 時獲取註冊編輯器的方式。另請參見 ShellExecute。
直接呼叫執行檔可以省去中間人,而且總是首選。
Uslackr 對您原始問題的評論也是正確的,他指出系統路徑上的 perl 執行檔已被呼叫。您最好直接指定您希望通過完整路徑執行的執行檔,以避免意外呼叫另一個執行檔。這對可靠性和安全性都有好處。犧牲了可移植性,但您可以選擇優先級。