perl - 如何使用多个版本的 Perl 在 Perl 模块中安装脚本?
问题描述
我不认为这是一个重复的问题。这专门针对 Perl 模块附带的脚本。
通常,在安装多个 Perl 版本时,您可以将 perl 可执行文件标记为版本号 ( perl5.32
),以便它们可以并排放置在/whatever/bin
. 我需要对模块附带的脚本做同样的事情。示例:perltidy
。所以:
当我构建 perl 时,我可以在配置中添加一个设置,它会自动 [原文如此] 创建“版本化”脚本名称吗?
perl Makefile.PL
或者,当我调用或perl Build.PL
构建脚本以制作“版本化”脚本名称时,我可以设置什么吗?
是的,有plenv
and perlbrew
,但我不想在生产端使用它们,但是在我的生产机器上会有一段时间同时存在两个版本。我将随着时间的推移迁移程序;一天晚上,我不会“大刀阔斧”地切换到新版本。
解决方案
我在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