Perl模块依赖于二进制文件,为什么即使使用CheckBin,FreeBSD上的测试也会失败?

Perl模块依赖于二进制文件,为什么即使使用CheckBin,FreeBSD上的测试也会失败?,perl,Perl,我制作了一个Perl模块(Qiime2::Artifact),它严重依赖于“解压””二进制文件 工作[1] 模块在这里: 为了声明依赖关系,我使用了Distzilla的CheckBin插件: [CheckBin] command = unzip 这将导致Makefile.PL中的此部分: # inserted by Dist::Zilla::Plugin::CheckBin 0.008 use Devel::CheckBin; check_bin('unzip'); 问题是FreeBSD(可

我制作了一个Perl模块(Qiime2::Artifact),它严重依赖于“
解压”
”二进制文件 工作[1]

模块在这里:

为了声明依赖关系,我使用了Distzilla的CheckBin插件:

[CheckBin]
command = unzip
这将导致Makefile.PL中的此部分:

# inserted by Dist::Zilla::Plugin::CheckBin 0.008
use Devel::CheckBin;
check_bin('unzip');
问题是FreeBSD(可能还有其他平台,我只在Linux和Darwin下测试)的测试失败了: 这看起来像是解压问题,显然二进制文件不存在,或者至少我可以告诉你,执行“解压”返回非零

1) 天真的问题:解压在BSD下不是很常见,还是有其他解释

2) 更重要的问题:为什么CheckBin模块没有阻止安装/测试?或者它在工作,二进制文件确实在那里,而我遗漏了其他东西

谢谢你的建议/指导


[1] 我检查了一些Perl模块,以避免直接执行解压,但没有一个模块提供整套功能(如通过管道传输到存档的单个文本文件)或所需的性能。

从大家那里收到宝贵的提示(特别感谢@Grinnz),似乎:

  • unzip
    通常在BSD中找到,但有不同的风格
  • CheckBin
    确实在工作,这只是二进制文件本身以一种意外的方式运行(如果被调用,特别是以非零状态退出,我必须说,即使不是看不见的,也很烦人)
最后评论:
-
Archive::Zip
是一个很好的提示,但我不会采用它,因为在MacOS下安装外来模块越来越困难。我可能会改变主意,把它们放在miniconda中,这对解决这个问题有很大帮助。

另请参见UNIX平台上的gzip和bzip更为常见。通常,您必须将解压作为附加包安装。大多数系统不需要压缩实用程序,而且通常在最小的操作系统中找不到预安装的二进制文件。没有“解压缩”是系统的合法条件,我真正不理解的是为什么“CheckBin”不阻止安装。缺少“解压”不仅限制了一些功能(在这种情况下,我可以跳过一些测试),还阻止了对模块的任何使用,这就是为什么我想了解我应该在这里做什么:跳过测试对我来说是不够的,我希望模块根本不安装。顺便说一下,我建议将命令作为列表传递给
系统
,而不是字符串。如果引用不正确,则需要使用String::ShellQuote正确引用bourne shell的任意文件名,但使用system的列表形式和完全避免使用shell更容易<代码>我的@cmd=('unzip','p',$self->{filename},$file)。。。system(@cmd)我怀疑是FreeBSD有一个不同的解压,如图所示。与我的linux机器上可用的
unzip
不同,它没有显示任何有效的语法来调用
unzip
,没有参数,就像构造函数测试那样。