如何检查Perl的可用性,其版本和所需模块的存在?

abu*_*ker 6 bash perl perl-module

我编写了一个Perl脚本,我只是想把它给每个人,因为我计划编写一个bash脚本,用于测试用户的环境并查找该环境是否能够运行Perl脚本.

我想测试一下这样的事情:

  1. Perl是否已安装在该系统中
  2. Perl应该有5或更高版本
  3. 模块JSON :: Any是否可用

任何建议都会非常感激:-)

dax*_*xim 14

不,不要编写shell脚本.Perl已经有了一个很好的方法来做到这一点.正确的方法是使用普通工具链构建CPAN就绪分发.其中一些在perlnewmod,perlmodstyleperlmodinstall中有解释.

对于最小的工作示例,创建一个目录布局:

.
??? Build.PL
??? README
??? script
    ??? abuscript.pl
Run Code Online (Sandbox Code Playgroud)

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;
Run Code Online (Sandbox Code Playgroud)

更改细节以适应您的目的.

README文件中,输入一些安装说明,例如:

To install this module, run the following commands:

perl Build.PL
./Build install
Run Code Online (Sandbox Code Playgroud)

完成所有这些后,您运行:

perl Build.PL
./Build manifest
./Build dist
Run Code Online (Sandbox Code Playgroud)

这将导致.tar.gz您将分发的存档.告诉您的用户像任何其他CPAN模块一样安装它,或者如果他们不知道这意味着什么,他们应该阅读README.

如果您有时间,我建议您将脚本转换为模块.程序pl2pm(随Perl一起提供)和CPAN模块Module-Starter-PBP可以帮助您.

如果许可证允许,则可以将代码上传到CPAN,以使您的用户更方便.要求在任何第一以下位置的帮助:邮件列表module-authors@perl.org,网络论坛PerlMonks,在磁铁的IRC频道#toolchain(IRC://irc.perl.org/toolchain)


sor*_*rin 8

关于检查Perl可用性,最简单的方法是检查命令的返回代码(退出代码)perl -v,如果不是0,则没有Perl.

现在关于Perl要求,您应该从Perl脚本中处理它们:

#!/usr/bin/env perl
use 5.006_001;
use ModuleName 2.0;
Run Code Online (Sandbox Code Playgroud)

上面的Perl代码只能运行perl 5.6.1或更新版本,并且运行模式"ModuleName"版本2.0或更新版本.无需从bash手动检查Perl版本,直接从Perl脚本执行它更好更容易.

参考文献:


Jon*_*ler 2

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
Run Code Online (Sandbox Code Playgroud)

我经常使用 ' ${PERL:-perl}' 和类似的结构来标识命令(用于awkvsnawkgawk; troffvs groff; 等)。

如果您想测试 JSON::Any 的版本,请改为捕获命令的输出。如果您想测试 Perl 的版本,请添加“ use 5.008009;”或您认为合理的任何数字。(不久前,他们终于从工作中的 NFS 安装文件系统之一中删除了 Perl 4 - 但这并不是机器上唯一的 Perl - 至少在过去十年或更长时间里不是这样!)