我在cgi脚本中有以下代码,它只是将xml文件捆绑成一个zip文件以供下载:
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文件应该被拾取......)。
答案 0 :(得分:7)
我认为choroba的评论是正确的。因为它只发生在你在windows上安装而不是在windows上测试时,我敢打赌这是一个“C:\ Program Files”空间问题。它列在perl的File :: Glob的文档中:
由于历史原因,CORE :: glob()也将拆分它 关于空白的论证,将其视为多种模式,而 bsd_glob()将它们视为一种模式。
这很容易破坏事情。在这种情况下,文档建议使用bsd_glob()而不是glob。
我可以剪切和粘贴您的代码并使用$ in_path ==“。”在Windows上运行它,但是当我使用$ in_path =“C:\ Path With Spaces”时它会中断。另外,对于空格,我很确定它也会在linux上失败。