【问题标题】:Version handling of Perl in WindowsWindows 中 Perl 的版本处理
【发布时间】:2011-05-14 11:55:29
【问题描述】:

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

我需要一种机制,允许我为不同的脚本使用不同版本的 Perl,而不会影响系统配置。 (例如,我对某些脚本使用 Perl 5.6.1 版,对其他 Perl 脚本使用 perl 5.8.8)

【问题讨论】:

    标签: perl


    【解决方案1】:

    当我必须使用两个不同但又非常不兼容的 Perl 版本时,这是一个老把戏:使用不同的后缀:

    例如,我的系统上有 ClearQuest,并且必须使用cqperl(这是 ClearQuest 的 Perl 版本)来执行处理 ClearQuest 中问题的脚本。然而,如果我必须从我们的数据库中操作 SQL 数据,我必须使用我的 ActivePerl,因为我无法将 DBI 模块添加到 cqperl 中。

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

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

    创建一个Open 操作,并将其与要执行该后缀的 Perl 的完整路径名相关联。像这样:

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

    %* 很重要,因此您可以将其他参数传递给您的程序。

    在您的情况下,您可以将 *.pl 用于 Perl 5.8.8 和 *.pl6 用于 Perl 5.6。

    您甚至不需要将 Perl 的 bin 目录放在您的路径中。只需输入脚本的名称即可。

    【讨论】:

    • 这不会影响 Perl 库的包含吗?
    • @hemanth,Perl 库搜索路径被编译成 perl 可执行文件(尽管它可能与 perl.exe 的位置有关)。 (使用 PERL5LIB 或 PERLLIB 环境变量添加的任何目录除外。)
    • 我觉得反过来也可以。我可以将 perl.exe 重命名为 XXXperl.exe 并调用 XXXperl.exe,而不是重命名 Perl 脚本
    • 当然可以,但是您必须在 PATH 中包含所有版本的 Perl,并确保使用正确的版本。我的方式是,您的脚本后缀将确定要使用的 Perl 的正确版本,并且您不需要添加 Perl 所在路径中的所有不同位置。您的要求之一是不改变您的道路。
    【解决方案2】:

    在 Unix 上:使用 shebang 行。

    在 Windows 上:安装 perl 时,通常会创建两个可执行文件:perl.exe 和 perl5.N.M.exe。例如。在我的草莓安装中,我有 perl.exe 和 perl5.10.1.exe。因此,如果两个 perls 都在 PATH 中,您可以将它们称为 perl5.6.1 和 5.8.8。 即“perl5.6.1 program.pl”。

    附:我建议将整个环境升级到 5.12.2 - Perl 有许多新的有用功能。

    【讨论】:

      【解决方案3】:

      您总是可以使用您选择的 perl 解释器来运行您的脚本, 假设您在 с:/perl_56 和 c:/perl_58 中安装了 2 个不同的 perls。

      在 CMD.exe 中你可以试试这个:
      c:/perl_56/bin/perl.exe path_to_your_script here

      c:/perl_58/bin/perl.exe path_to_your_script 在这里

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

      【讨论】:

      • 不幸的是,我在运行时不知道我的 Perl 可执行文件的路径。换句话说,我不能硬编码 Perl 可执行文件的路径。
      • 好吧,在我看来,你唯一能 100% 确定你的脚本将在目标系统上运行的选择是使用正确版本的 perl 将它们编译成 .exe 文件(这perl 包含自身和存档中的所有库/模块的方式,然后自动将其提取到目标机器上的临时目录。这样您就可以在任何地方运行脚本,甚至没有安装 perl),就像这里解释的那样: stackoverflow.com/questions/1237286/…
      猜你喜欢
      • 2012-02-02
      • 2021-10-27
      • 2013-04-20
      • 2012-10-24
      • 2011-02-23
      • 1970-01-01
      • 2015-07-06
      • 2014-02-15
      • 1970-01-01
      相关资源
      最近更新 更多