在Windows上处理Perl版本

4

是否可以在不使用SET或操纵环境变量"PATH"的情况下使用不同版本的Perl?

我需要一种机制,允许我在不影响系统配置的情况下为不同的脚本使用不同版本的Perl。 (例如,我正在使用Perl 5.6.1处理某些脚本,并使用Perl 5.8.8处理其他Perl脚本)

3个回答

2

当我需要使用两个不同但非常不兼容的Perl版本时,我会使用一个古老的技巧:使用不同的后缀名:

例如,我的系统上安装了ClearQuest,并且必须使用(ClearQuest的Perl版本)来执行操作ClearQuest中的问题的脚本。然而,如果我需要操作我们数据库中的SQL数据,则必须使用ActivePerl,因为我无法将DBI模块添加到中。

我做的是将*.pl后缀名与ActivePerl相关联,将*.cqpl后缀名与相关联。现在,当我执行以*.cqpl结尾的脚本时,它使用一个Perl版本,而以*.pl结尾的脚本则由另一个Perl版本执行。

要将后缀名与程序相关联,请进入Windows资源管理器窗口,并从“工具”菜单中选择“文件夹选项”。然后,单击“文件类型”选项卡。单击“新建”按钮并创建一个新扩展名以与文件相关联。然后,在已注册的文件类型窗口中选择它,并单击底部的“高级”按钮。

创建一个“打开”动作,并将其与要执行该后缀名的Perl的完整路径名称相关联。就像这样:

"C:\Perl\bin\perl.exe" "%1" %*

%* 很重要,这样你可以向程序传递其他参数。

在您的情况下,您可以使用 *.pl 来运行 Perl 5.8.8,使用 *.pl6 来运行 Perl 5.6。

甚至不需要将 Perl 的 bin 目录添加到您的路径中。只需键入脚本名称即可。


这不会影响Perl库的包含吗? - hemanth
@hemanth,Perl库搜索路径已编译到perl可执行文件中(尽管它可能相对于perl.exe的位置)。 (除了使用PERL5LIB或PERLLIB环境变量添加的任何目录。) - cjm
我认为反过来也可以做。不必重命名Perl脚本,而是将perl.exe重命名为XXXperl.exe并调用XXXperl.exe。 - hemanth
当然可以,但你需要将所有版本的Perl添加到你的PATH环境变量中,并确保使用正确的版本。我的方法是,你的脚本后缀将决定使用哪个Perl版本,并且你不需要添加Perl所在的各种路径。你的要求之一是不修改你的路径。 - David W.

2
在Unix系统上:使用shebang命令。
在Windows系统上:当安装Perl时,通常会创建两个可执行文件:perl.exe和perl5.N.M.exe。例如,在我的Strawberry安装中,我有perl.exe和perl5.10.1.exe。因此,如果两个Perl都在PATH中,您可以将它们称为perl5.6.1和5.8.8。即“perl5.6.1 program.pl”。
附言:我建议升级整个环境到5.12.2-Perl具有许多新的有用功能。

1

您可以随时使用您选择的 Perl 解释器运行脚本, 假设您在 C:/perl_56 和 C:/perl_58 上安装了两个不同版本的 Perl。

在 CMD.exe 中,您可以尝试以下操作:
c:/perl_56/bin/perl.exe path_to_your_script here

c:/perl_58/bin/perl.exe path_to_your_script here

通过不同版本的 Perl 运行脚本。 不幸的是,在 Windows 上,您不能像在 Unix 系统上那样在脚本开头使用 "shebang"。


很遗憾,在运行时我不知道我的 Perl 可执行文件的路径。换句话说,我不能硬编码 Perl 可执行文件的路径。 - hemanth
恩,那么我觉得你唯一百分之百确定脚本能够在目标系统上运行的选项就是使用正确版本的perl将它们编译成.exe文件(这样perl会把自身和所有库/模块打包到归档文件中,然后自动提取到目标机器的临时目录中。这样你就可以在任何没有安装perl的地方运行你的脚本了),就像这里所解释的:https://dev59.com/hHM_5IYBdhLWcg3ww2Kb - Dmitry Avtonomov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接