我正在运行CentOS 5.4,该系统默认只提供Perl 5.8版本。但是,我有一个需要Perl 5.10版本的程序,因此我在CentOS上编译了Perl 5.10。现在问题是如何指定要使用哪个版本的Perl来运行程序,因为默认情况下perl命令使用的是5.8版本。
我强烈建议不要去搞系统Perl。
还没有人提到过App::perlbrew。它可以让你拥有多个Perl版本并且轻松地在它们之间切换。当然也可以手动完成,但使用这个工具更加容易;来自Pod的描述:
# Install some Perls
perlbrew install perl-5.12.2
perlbrew install perl-5.8.1
perlbrew install perl-5.13.6
# See what were installed
perlbrew list
# Switch perl in the $PATH
perlbrew switch perl-5.12.2
perl -v
# Switch to another version
perlbrew switch perl-5.8.1
perl -v
# Switch to a certain perl executable not managed by perlbrew.
perlbrew switch /usr/bin/perl
# Or turn it off completely. Useful when you messed up too deep.
perlbrew off
# Use 'switch' command to turn it back on.
perlbrew switch perl-5.12.2
#!/usr/bin/perl
您可能还希望更改PATH变量,以使包含perl 5.10二进制文件的目录在5.8二进制文件目录之前列出。
例如:export PATH=/path/to/perl/5.10:$PATH
我喜欢在/usr/local/bin
中制作不同的perl可执行文件的符号链接:
$ [sudo] ln -s /path/to/perl5.10.1.exe /usr/local/bin/perl510
$ [sudo] ln -s /path/to/perl5.13.8.exe /usr/local/bin/perl513
$ ... etc. ...
$ # and just for completeness
$ ln -s /usr/bin/perl /usr/local/bin/perl58
然后只需调用:
$ perl510 script_to_use_with_v5.10.pl
将您的PATH环境变量设置为指向您的新perl可执行文件。例如
export PATH=/newpath/perl:$PATH
解决方案有两个部分...首先编辑需要特定版本的myscript.pl
old
#!/usr/bin/perl
new
#!/usr/bin/env perl
以上对脚本的正常执行没有影响...当您想要让myscript.pl使用特定的perl版本时,请创建一个包含以下内容的包装脚本
export PATH=/cool/new/version/perl:$PATH
# now execute script on following line
/path/to/myscript.pl
这样其他脚本的调用保持不变,它们仍然使用默认的 Perl,而启动器包装脚本则使用选择的 Perl 版本执行相同的 myscript.pl 脚本。
顺便说一下,perlbrew包可以从EPEL存储库中安装到CentOS 5.x。我最初尝试仅安装此rpm,但它有许多依赖项,因此我选择将EPEL存储库添加到我的yum repos列表中。