强制 PERL 脚本使用可移植的 perl

强制 PERL 脚本使用可移植的 perl

我一直使用安装在 C: 驱动器 (5.20.11) 中的 Strawberry perl 开发脚本,现在我已经在 USB 驱动器上安装了便携版本。 (5.28.xx) 无论我尝试什么,它总是恢复到 C: 中的主要版本

我知道这一点,因为我把它放在脚本的顶部(打印 $];)并且总是返回 5.2011。

我尝试使用修改后的标准 Strawberry bat 文件来启动 USB 版本的 perl

@echo off
if not "%1" == "/SETENV" setlocal
set PATH=%~dp0perl\site\bin;
sample.pl
pause

...认为这会将路径设置为所需的版本,但仍然从 C: 驱动器加载!!

我尝试将上述路径行作为脚本的第一行,(没有球 - 事实上脚本将在没有任何事的情况下运行?)

更不用说使用“explorer.exe”的快捷方式链接,这样我就可以在目标字段中添加“..\script_path\sample.pl”...(该方法不适用于目标中的 cmd.exe。在程序名称后添加链接,它所做的只是打开 CMD,并将目录设置为“RunMe”),然后抱怨“sample.pl”不是命令或脚本。(甚至尝试过“perl sample.pl”...因为您在 CMD 中输入的不起作用)

好的,所以最终用户将不会运行两个版本...但这对我没有任何帮助!

(午饭后,将尝试更改 C:Strawberry 的名称,以便在启动时无法找到它......但这似乎有点激烈!)

注意:在目标字段中,它是“strwawberry/perl/bin/perl.exe”,另一个是“R:\School Programs\sample.pl”、“School Programs\sample.bat”,快捷方式是“R:\RunMe\sample.bat”。(启动为空...我无法设置它,因为驱动器号因用户而异!)

彻底迷失了!!

答案1

无论您如何调用批处理文件,只需运行sample.pl

  • 不保证当前目录批处理文件夹%~dp0
  • 替换系统变量path将切断你与任何其他需要的可执行文件的联系
  • 使用注册表中的关联/文件类型"hklm\software\classes\.pl"来识别要执行 .pl 文件的程序,并不是你的版本。

所以最好跑你的perl.exe 并将 sample.pl 作为参数传递。
编辑:将路径更改为 perl.exe由于@JosefZ提示

@echo off
if not "%~1" == "/SETENV" setlocal
set "PATH=%~d0\strawberry\perl\bin;%path%"
"%~d0\strawberry\perl\bin\perl.exe" "%~dp0sample.pl"
pause

答案2

经过多次尝试和错误,我发现(到目前为止)它似乎无需使用批处理脚本、使用 CMD 快捷方式和脚本位置的相对链接即可工作。因此,我现在在“目标”字段中使用的命令是 C:\Windows\System32\cmd.exe \k "..\strawPerlPort\perl\bin\perl.exe ..\School_Programs\sample.pl"

它确实在 CMD 标题栏的标题栏中创建了相当长的链接,但至少它不能工作,因为“目标”或“起始”都不接受相对路径或“%~dp0”(我的理论是 CMD.exe 正在加载 perl,反过来,perl 正在加载脚本

相关内容