代码之家  ›  专栏  ›  技术社区  ›  Martin Ba

我是否需要PATH中的Perl-bin目录来运行Perl程序(在Windows上)?

  •  5
  • Martin Ba  · 技术社区  · 12 年前

    传统上,我只会 C:\perl\bin 在我的PATH变量中,但由于版本冲突,我想在不同的位置保留不同的perl版本 C:\Perl-versionXY\bin 并通过直接调用来执行我的Perl脚本 C:\Perl-...\bin\perl.exe theScript.pl

    这实际上是在一个自动化系统下运行的 已经直接调用 C:\perl\bin\perl.exe 用于所有perl脚本。(但是 C: \perl\bin 而且 在路径中。)

    为了便于并行使用不同的Perl版本,我想 从路径中删除C-perl-bin 以确保我们永远不会从任何与Perl相关的PATH设置中看到副作用。

    这应该有效吗?需要额外DLL文件的模块(比如LibXML,需要perl的bin目录中的LibXML.DLL)呢??

    我将使用Strawberry Perl可移植的并行版本。(Who的自述文件提到了一些PATH设置,但没有提到哪个用于什么。)

    2 回复  |  直到 12 年前
        1
  •  1
  •   Harry Johnston    12 年前

    如果所有DLL都与可执行文件位于同一目录中,那么它应该可以正常工作。如果路径中只有一个Perl条目,那么DLL必须与可执行文件位于同一目录中(或者使用某些显式逻辑找到),所以您应该没事。当可执行文件加载DLL时,搜索的第一个位置是包含可执行文件的目录。

    如果确实遇到了问题,一种选择是为每个版本创建一个命令文件。您可以给这些不同的名称,如perl58.cmd、perl514.cmd等,将它们全部放在一个目录中,然后将该目录放在路径上。在每个命令文件中,将相应的Perl目录添加到路径中,然后使用命令行参数启动Perl:

    setlocal
    PATH=c:\perl58\bin;%PATH%
    perl %*
    

    注意使用 setlocal 命令,这样对路径的更改就不会导出回运行命令文件的命令行窗口。

        2
  •  0
  •   Len Jaffe    12 年前

    我要提醒您的是,如果您在PATH上没有Perl-bin目录,并且您执行的任何操作都试图在没有提供明确路径的情况下调用驻留在bin目录中的程序(这是一种糟糕的做法,但这并不能阻止它的发生),那么您就会失败,并且根据如何处理失败,可能会表现为微妙且难以调试的问题。

    所以我说,除非你有一个非常有说服力的理由不添加它(例如,it政策使添加到PATH变得非常困难和烦人),否则就添加它。