【问题标题】:Do I need the Perl bin directory in the PATH to run perl programs (on Windows)?我是否需要 PATH 中的 Perl bin 目录来运行 perl 程序(在 Windows 上)?
【发布时间】:2012-08-03 11:26:10
【问题描述】:

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

这实际上是在自动化系统下运行的,我们已经为所有 perl 脚本直接调用C:\perl\bin\perl.exe。 (但C:\perl\bin 也在 PATH 中。)

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

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

我将使用 Strawberry Perl 便携版用于并排版本。 (谁的自述文件提到了一些 PATH 设置,但没有提到哪个用于什么。)

【问题讨论】:

  • 你的意思是C:\bin\perl,因为这样更有意义
  • @johncorbett:为什么这更有意义? Windows 不是 unix,所以它没有 c:\bin。 C:\perl\bin 非常有意义,恕我直言
  • 哈哈,我猜 unix 就是这么深入我的脑海,即使在我使用 cygwin 的 Windows 上也是如此
  • c\perl\bin 完全正确(也是我们目前使用的 ActiveState 的 perl 的默认位置)

标签: windows perl strawberry-perl path-variables


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    我会提醒您,如果您在 PATH 上没有 Perl bin 目录,并且您执行的任何操作都会尝试调用存在于 bin 目录中的程序而不提供显式路径(不好的做法,但这不会停止它不会发生)然后你就会失败,并且根据处理失败的方式,可能会出现微妙且难以调试的问题。

    所以我说,除非你有非常令人信服的理由不添加它(例如,IT 政策使得添加到 PATH 变得非常困难和烦人),然后添加它。

    【讨论】:

    • 好吧,如果我有两个 perl 版本,一个说 5.8 和一个 5.14,我只能有意义地将其中一个添加到(全局)路径中。这将是其他版本的错误路径。因此,将它添加到(全局)路径似乎根本没有任何意义,并且在路径中没有它比需要将其设置为依赖于上下文更容易。
    • 在 Unix 系统上,一种常见的做法是使用 shell 脚本包装可执行文件,这些脚本配置可执行文件运行的环境。您是否有理由不能将 perl 程序的调用包装在批处理或 powerShell 脚本中?
    猜你喜欢
    • 2013-01-28
    • 2023-03-02
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 2012-03-28
    • 2013-07-05
    • 2012-12-21
    • 2017-02-03
    相关资源
    最近更新 更多