[英]How to check availability of Perl, its version and presence of a required module?
我编写了一个Perl脚本,我只是想把它给每个人,因为我计划编写一个bash脚本,用于测试用户的环境并查找该环境是否能够运行Perl脚本。
我想测试一下这样的事情:
任何建议都会非常感激:-)
不,不要编写shell脚本。 Perl已经有了一个很好的方法来做到这一点。 正确的方法是使用普通工具链构建一个支持CPAN的分发。 其中一些在perlnewmod , perlmodstyle和perlmodinstall中有解释。
对于最小的工作示例,创建一个目录布局:
.
├── Build.PL
├── README
└── script
└── abuscript.pl
在Build.PL
文件中,放入:
use 5.000;
use Module::Build qw();
Module::Build->new(
module_name => 'abuscript',
dist_version => '1.000',
dist_author => 'abubacker <abubacker@example.com>',
dist_abstract => 'describe what the script does in one sentence',
configure_requires => {
'perl' => '5.000',
},
requires => {
'JSON::Any' => 0,
},
)->create_build_script;
更改细节以适应您的目的。
在README
文件中,输入一些安装说明,例如:
To install this module, run the following commands:
perl Build.PL
./Build install
完成所有这些后,您运行:
perl Build.PL
./Build manifest
./Build dist
这将导致您将分发的.tar.gz
存档。 告诉您的用户像任何其他CPAN模块一样安装它,或者如果他们不知道这意味着什么,他们应该阅读README。
如果您有时间,我建议您将脚本转换为模块。 程序pl2pm (随Perl一起提供)和CPAN模块Module-Starter-PBP可以帮助您。
如果许可证允许,则可以将代码上传到CPAN,以使您的用户更方便。 要求在任何第一以下位置的帮助:邮件列表module-authors@perl.org ,网络论坛PerlMonks ,在磁铁的IRC频道#toolchain(IRC://irc.perl.org/toolchain)
关于检查Perl可用性,最简单的方法是检查命令perl -v
的返回码(退出代码),如果不是0
,则表示没有Perl。
现在关于Perl要求,您应该从Perl脚本中处理它们:
#!/usr/bin/env perl
use 5.006_001;
use ModuleName 2.0;
上面的Perl代码只能运行perl 5.6.1或更新版本,并且运行模式“ModuleName”版本2.0或更新版本。 无需从bash手动检查Perl版本,直接从Perl脚本执行它更好更容易。
参考文献:
if perl -MJSON::Any -e 'print "$JSON::Any::VERSION\n"' >/dev/null 2>&1
then : OK
else echo "Cannot find a perl with JSON::Any installed" 1>&2
exit 1
fi
我经常使用' ${PERL:-perl}
'和类似的结构来识别命令(对于awk
vs nawk
或gawk
; troff
vs groff
;等等)。
如果要测试JSON :: Any的版本,请从命令中捕获输出。 如果要测试Perl的版本,请添加' use 5.008009;
'或者你认为合理的数字。 (不久之前,他们最终从工作中的一个NFS挂载文件系统中删除了Perl 4 - 但这不是机器上唯一的Perl - 至少,不是在过去十年或更长时间!)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.