2015-10-30 27 views
3

我有一個CGI腳本,只是捆綁了XML文件轉換成一個zip下載下面的代碼:perl的水珠在Windows匹配的文件VS Linux的

my $obj = Archive::Zip->new(); 
foreach my $xml_file (glob(File::Spec->catfile($in_path,"*.xml"))) 
{ 
    $obj->addFile($xml_file); 
} 
$obj->writeToFileNamed($zipfile_name); 

能正常工作的單元測試,當我運行在Linux上,但在Windows安裝時,我得到:

Can't call method "desiredCompressionLevel" on an undefined value at /usr/share/perl5/Archive/Zip/Archive.pm line 249. 

在這兩種情況下,它可以在Linux下的單元測試正常,但在Windows上安裝時失敗(有中應該是這樣的目錄XML文件已接...)。

+1

Windows路徑中是否有空格? – choroba

+1

@ikegami,你說得對。當我運行該測試時,我一次改變了兩件事。 if定義沒有區別 –

回答

7

我認爲choroba的評論是正確的。因爲它只發生在你安裝在Windows上而不是在Windows上測試時,我敢打賭它是一個「C:\ Program Files」空間問題。它在文檔中列出了Perl的文件::水珠:

由於歷史的原因,CORE ::水珠()也將各執其空白參數 ,把它當作多個模式,而 bsd_glob()認爲它們是一種模式。

這很容易破壞事物。文檔建議在這種情況下使用bsd_glob()而不是glob。

我可以剪切和粘貼你的代碼,並使用$ in_path ==「。」在windows上運行它,但是當我使用$ in_path =「C:\ Path With Spaces」時它會中斷。另外,使用空格,我很確定它也會在Linux上失敗。