我不认为这是一个重复的问题,这是专门针对Perl模块附带的脚本的。
通常,当安装多个Perl版本时,您可以使用版本号(perl5.32
)标记Perl可执行文件,以便它们可以并排放置在/whatever/bin
中。我需要对模块附带的脚本执行相同的操作。perltidy
。因此:
当我构建perl的时候,是否有一个设置可以自动创建“版本化”脚本名?
或者,当我在构建脚本时调用perl Makefile.PL
或perl Build.PL
时,是否可以设置一些东西来生成“版本化”脚本名称?
是的,有plenv
和perlbrew
,但是我不想在生产端使用它们,但是在我的生产机器上会有一段时间两个版本都存在。我不会“大敲”一个切换到一个新版本的一个晚上。
2条答案
按热度按时间bt1cpqcv1#
我在Make links to per-version tools中写了更多关于这方面的内容。
我安装了大约30个perls,并且我手动安装每个perls:
现在有了
/usr/bin/perls/perl-5.x.y/bin/perl
之类的东西,如果我想安装模块或脚本,我可以使用cpan
:当您通过普通的Perl工具链进行安装时,shebang行指向安装它的
perl
(有关更多信息,请参阅最近的Perl.com文章Bang Bang):这充分地划分了不同的程序,每个程序都知道应该运行哪个
perl
。当然,这些长路径太多了,所以我有一个程序,它在
~/bin
中创建符号链接,使~/bin/cpan-5.x.y
指向它。同一个程序接受它在/usr/bin/perls/perl-5.x.y/bin
中找到的任何程序,并创建类似的符号链接。rhich是我自己的类似
which
的程序,它使用正则表达式:除此之外,它还创建了使用
-latest
而不是版本的链接,这样我就不必记住我拥有的内容:在那里的某个地方,我也只是让裸命令名指向最新的,这是我大多数时候想要的:
完美
下面是我安装的所有
perltidy
:9gm1akwq2#
最新情况:我重新阅读了你的问题,我想我第一次读错了。我将在最后加上我的第一个解释,因为它可能有用。
所以据我所知,你希望安装
/usr/bin/yourapp-1.1
,然后当人们升级时,你希望安装/usr/bin/yourapp-1.2
?首先,这似乎是一个考虑不周的想法。如果您的脚本依赖于Your::Module,那么按照正常的Perl模块安装,Your::Module 1.2将替换系统上的Your::Module 1.1,因此如果
/usr/bin/yourapp-1.1
运行,它将使用Your::Module 1.2运行。(我猜,除非您对它进行fatpack。)但这肯定是可能的。
简单的方法是在Makefile.PL中使用File::Copy将未版本化的脚本复制到包含版本号的新文件名中,然后让MakeMaker执行操作。
以前的答复
如果您的脚本包含这样的shebang:
然后ExtUtils::MakeMaker将自动重写它以指向构建发行版时Perl的当前版本。
如果您的脚本包括:
然后它不会被重写,脚本将在运行时针对$PATH环境变量中找到的任何版本的perl运行,这可能不是您想要的。