perl - 如何在具有多个 Perl 版本的 Perl 模块中安装脚本?

标签 perl installation module

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

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

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

或者,当我构建脚本以创建“版本化”脚本名称时,当我调用 perl Makefile.PLperl Build.PL 时,是否可以设置一些内容?

是的,有plevperlbrew,但我不想在生产端使用它们,但我的生产会有一段时间当两个版本都存在时的机器。随着时间的推移,我将迁移程序;我不会一晚上就“大爆炸”地切换到新版本。

最佳答案

我在 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/

相关文章:

perl - 使用子驼鹿对象重载驼鹿对象,使其成为常规数据类型结构

c++ - Linux 中的性能数据收集(API)

python - Anaconda 中的 Jupyter 实验室不工作 :Error executing Jupyter command 'lab' : [WinError 5] Access is denied

powershell - 安装其他安装程序?

javascript - 将 JS 与 rollup 和 Babel 捆绑以在 IE11 中使用

javascript - ES6 导入/导出如何与 CommonJS 导出/require 一起使用

linux - 用于解析的Perl程序结构

perl - 如何在不使用模块的情况下分析子例程?

python - Anaconda 安装问题 - 无法创建 Anaconda 菜单

joomla - 在 Joomla 的另一个模块中加载一个模块