我正在爲我編寫的庫編寫測試腳本,並且作爲測試的一部分,我正在清除$ ENV {PATH}變量以確保我放在我的路徑中的東西不會導致成功。該庫將所需的路徑附加到PATH變量。如果PATH env變量初始化,Perl IPC :: Cmd不運行應用程序
爲了背景,我在32位Windows XP上運行Strawberry Perl v5.12.0。 IPC :: Cmd的版本是0.76,IPC :: Open3的版本是1.05。
我看到的錯誤是,如果我清除PATH變量然後設置它,使用IPC :: Open3的IPC :: Cmd找不到該應用程序。如果我不這樣做,那麼它會運行良好。下面是說明了這個錯誤的腳本示例:
use strict;
use warnings;
use IPC::Cmd qw(run);
$ENV{PATH} = '';
$ENV{PATH} = 'c:\\strawberry\\perl\\bin';
my ($success, $error_code, $full_buf, $stdout_buf, $stderr_buf) =
run(command => 'perl -v', verbose => 0);
if ($success) {
print 'Success: ';
print join("\n", @{$stdout_buf});
} else {
print 'Failure: ';
print join("\n", @{$full_buf});
}
exit 0;
如果我運行它像這樣,它打印的故障線路,如果我有兩個$ENV{PATH} =
註釋掉運行它,然後它打印成功行。我已經試過用第二條PATH行來改變斜槓並在最後添加斜槓,但這沒有什麼好處。
我已經通過調試器運行了這個,並且IPC :: Open3中的行398發生了故障: $pid = eval { system 1, @_ }; # 1 == P_NOWAIT
。如果我在此行後面檢查$!
,它會告訴我'沒有這樣的文件或目錄'。 PATH在這一點上仍然是正確的,它在任何時候都不會被修改。
另外還有一個奇怪的地方,我試過在重置PATH後使用IPC :: Cmd中的can_run
方法,它會發現沒有問題的命令。
在爲此提交一個錯誤報告之前,有沒有人看過這個並知道如何解決它?另外,對於我想要做的,這是正確的方式,還是有更好的方法來重置PATH變量進行測試?
在清除/重置之前,$ ENV {PATH}設置爲什麼? – vmpstr 2012-03-08 16:06:04
@vmpstr謝謝你,我慢慢地記住了這一點。由於這是Windows,%windir%\ system32也必須位於路徑中。我補充說,它的工作原理。 – Joel 2012-03-08 16:13:25