5

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

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

为了促进不同的 Perl 版本并排,我想从 PATH 中删除 C-perl-bin以确保我们不会看到任何与 Perl 相关的 PATH 设置的副作用。

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

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

4

2 回答 2

1

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

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

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

请注意该setlocal命令的使用,以便对路径的更改不会导出回您正在从中运行命令文件的命令行窗口。

于 2012-08-06T20:35:49.460 回答
0

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

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

于 2012-08-06T16:46:08.067 回答