windows与linux上的perl-glob匹配文件



我在一个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文件应该被提取…)

我认为choroba的评论是正确的。由于它只在windows上安装时发生,而不是在windows上测试时发生,我敢打赌这是"C:\Program Files"空间问题。它列在perl的文件::Glob:的文档中

由于历史原因,CORE::glob()也将拆分其关于空白的争论,将其视为多个模式,而bsd_glob()将它们视为一种模式。

这很容易把东西弄坏。在这种情况下,文档建议使用bsd_glob()而不是glob。

我可以剪切和粘贴您的代码,并在使用$in_path="."的窗口上运行它,但当我使用$in_path="C:\path with Spaces"时,它会中断。另外,有了空格,我确信它在linux上也会失败。

最新更新