我不认为这是一个重复的问题。这专门针对 Perl 模块附带的脚本。
通常,在安装多个 Perl 版本时,您可以使用版本号 (perl5.32
) 标记 Perl 可执行文件,以便它们可以并排放置在 /whatever/中bin
。我需要对模块附带的脚本执行相同的操作。示例:perltidy
。所以:
当我构建 perl 时,是否可以在配置上添加一个设置来自动[原文如此]创建“版本化”脚本名称?
或者,当我构建脚本以创建“版本化”脚本名称时,当我调用 perl Makefile.PL
或 perl Build.PL
时,是否可以设置一些内容?
是的,有plev
和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
中创建符号链接(symbolic link),这样 ~/bin/cpan-5.x.y
指向那个。同一个程序使用它在 /usr/bin/perls/perl-5.x.y/bin
中找到的任何程序并创建类似的符号链接(symbolic link)。
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
而且,这是我所有的 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
关于perl - 如何在具有多个 Perl 版本的 Perl 模块中安装脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65253804/