我有一个必须在Perl 5.10.1中运行的脚本,尽管我大学的linux集群系统使用的是最新版本的Perl。我试着安装Perlbrew,但我认为它不起作用。
我不知道如何在shebang中指定perl版本,因为我是如何调用/运行这个脚本的。这里有“cluster.pl”,它通过运行“./command.txt”来运行。
另外,我不认为我可以安装Perlbrew,因为它是大学的linux系统:复制粘贴安装命令后,我的终端屏幕显示Perlbrew补丁已经安装,但是当我使用“Perlbrew install perl-5.10.1”时,它会显示“command Perlbrew not found”我不知道如何运行脚本
到目前为止,cluster.pl拥有这个shebang:

#!/usr/bin/perl

一个相关的问题是在命令行中编写这个
/program/perl_v5.6.1/bin/perl scriptName.pl
#OP needed to use version 5.6.1, unlike me (I need 5.10.1)

但是,我不知道“program”是OP的目录还是路径的强制部分
下面是command.txt,它有必要的输入参数:
#this is command.txt
./cluster.pl Datachr1 2 galGal5.Chroinfo.txt

从本质上说,建议的shebang会去哪里?我会把“程序”也包括在我的路径中吗?

最佳答案

如果您将脚本包装在Perl的打包框架中,这将自动为您处理。当安装脚本时,它会用实际的perl更改shebang行。最后在文件的顶部出现了这样的内容:

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

你可以用我的应用程序rhich发行版试试这个。下载tarball并使用所需的perl运行Makefile.PL。运行make并将内容构建到blib staging目录中。你应该在那里看到修改过的shebang:
$ /Users/brian/bin/perls/perl5.30.0 MAkefile.PL
Checking if your kit is complete...
Looks good
WARNING: Older versions of ExtUtils::MakeMaker may errantly install README.pod as part of this distribution. It is recommended to avoid using this path in CPAN modules.
Generating a Unix-style Makefile
Writing Makefile for App::rhich
Writing MYMETA.yml and MYMETA.json

$ make build
make: *** No rule to make target `build'.  Stop.

$ make
cp lib/App/rhich.pm blib/lib/App/rhich.pm
cp script/rhich blib/script/rhich
"/usr/local/perls/perl-5.30.0/bin/perl" -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/rhich
Manifying 1 pod document
Manifying 1 pod document
brian@otter app-rhich  (master)[3125]

$ more blib/script/
#!/usr/local/perls/perl-5.30.0/bin/perl
package rhich;
use strict;
use warnings;

但是,如果您的perl路径是指向其他perl的符号链接,则可能会混淆这一点。我不使用perlbrew,因为我认为它除了节省您查找下载URL之外,不会添加太多内容。我可以使用它们的路径,所以我知道使用哪个版本。env也有类似的问题,这取决于您设置路径的方式。你如何处理这些问题取决于你决定如何管理事物,但正是这些问题表明,方便的工具并不是那么方便。

关于linux - 如何在不安装perlbrew的情况下指定用于脚本的perl版本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56530104/

10-10 18:23