首页 > 解决方案 > 如何使用多个版本的 Perl 在 Perl 模块中安装脚本?

问题描述

我不认为这是一个重复的问题。这专门针对 Perl 模块附带的脚本。

通常,在安装多个 Perl 版本时,您可以将 perl 可执行文件标记为版本号 ( perl5.32),以便它们可以并排放置在/whatever/bin. 我需要对模块附带的脚本做同样的事情。示例:perltidy。所以:

当我构建 perl 时,我可以在配置中添加一个设置,它会自动 [原文如此] 创建“版本化”脚本名称吗?

perl Makefile.PL或者,当我调用或perl Build.PL构建脚本以制作“版本化”脚本名称时,我可以设置什么吗?

是的,有plenvand perlbrew,但我不想在生产端使用它们,但是在我的生产机器上会有一段时间同时存在两个版本。我将随着时间的推移迁移程序;一天晚上,我不会“大刀阔斧”地切换到新版本。

标签: perlmodulescripting

解决方案


我在Make links to per-version tools中写了更多关于此的内容。

我安装了大约 30 个 perls,我手动安装了每个:

$ ./Configure -des -Dprefix=/usr/bin/perls/perl-5.x.y
$ make test install

现在有类似的东西/usr/bin/perls/perl-5.x.y/bin/perl。如果我想为此安装模块或脚本,我会使用它cpan

$ /usr/bin/perls/perl-5.x.y/bin/cpan ...

当您通过正常的 Perl 工具链安装时,shebang 行指向perl安装它的那个(有关更多信息,请参阅 Perl.com 的最新文章Bang Bang):

#!/usr/local/perls/perl-5.32.0/bin/perl
    eval 'exec /usr/local/perls/perl-5.32.0/bin/perl -S $0 ${1+"$@"}'
    if $running_under_some_shell;
#!/usr/local/bin/perl

这充分分隔了不同的程序,每个程序都知道perl应该运行哪个程序。

当然,那些长路径很难输入,所以我有一个程序可以在其中创建符号链接,~/bin从而~/bin/cpan-5.x.y指向它。同一个程序采用它找到的任何程序/usr/bin/perls/perl-5.x.y/bin并制作类似的符号链接。

rhich是我自己which的程序,它需要一个正则表达式:

$ rhich 5.32.0 | head -4
/Users/brian/bin/perls/pod_cover5.32.0 → /usr/local/perls/perl-5.32.0/bin/pod_cover
/Users/brian/bin/perls/ppodchecker5.32.0 → /usr/local/perls/perl-5.32.0/bin/ppodchecker
/Users/brian/bin/perls/prove5.32.0 → /usr/local/perls/perl-5.32.0/bin/prove
/Users/brian/bin/perls/plackup5.32.0 → /usr/local/perls/perl-5.32.0/bin/plackup

除此之外,它还会生成使用-latest而不是版本的链接,因此我不必记住我拥有的内容:

$ rhich latest | head -5
/Users/brian/bin/latest_sha1.pl
/Users/brian/bin/perls/perl-latest → /usr/local/perls/perl-5.32.0/bin/perl
/Users/brian/bin/perls/ptar-latest → /usr/local/perls/perl-5.32.0/bin/ptar
/Users/brian/bin/perls/ttree-latest → /usr/local/perls/perl-5.30.1/bin/ttree
/Users/brian/bin/perls/dprofpp-latest → /usr/local/perls/perl-5.14.4/bin/dprofpp

在那里的某个地方,我也只是让裸命令名指向最新的,这是我大部分时间想要的:

/Users/brian/bin/perls/perl → /Users/brian/bin/perls/perl-latest

错误的

而且,这是我所有的perltidy安装:

$ rhich perltidy
/Users/brian/bin/perls/perltidy5.30.1 → /usr/local/perls/perl-5.30.1/bin/perltidy
/Users/brian/bin/perls/perltidy5.30.0 → /usr/local/perls/perl-5.30.0/bin/perltidy
/Users/brian/bin/perls/perltidy-latest → /usr/local/perls/perl-5.32.0/bin/perltidy
/Users/brian/bin/perls/perltidy5.28.0 → /usr/local/perls/perl-5.28.0/bin/perltidy
/Users/brian/bin/perls/perltidy5.26.1 → /usr/local/perls/perl-5.26.1/bin/perltidy
/Users/brian/bin/perls/perltidy5.30.2 → /usr/local/perls/perl-5.30.2/bin/perltidy
/Users/brian/bin/perls/perltidy5.32.0 → /usr/local/perls/perl-5.32.0/bin/perltidy
/Users/brian/bin/perls/perltidy → /Users/brian/bin/perls/perltidy-latest

推荐阅读