2016年2月

perl 脚本无法识别参数

问题描述

C:\perl test.pl --param=eric

运行正常, 能识别出 param 的值是 eric

C:\ test.pl --param=eric

脚本能运行, 但是参数识别不出来, test.pl 里面是用的 GetOpt::Long 模块. 这里同样适用于 GetOpt::Std

首先 直接运行 test.pl 能直接运行, 说明 .pl 是和 perl.exe 关联的.
先是怀疑 perl 的 GetOpt 模块有问题, 尝试去替换那个模块, 无解.

然后google 到下面这2个答案:
Why do I have to explicitly add perl before the script for getops to run properly?
How do I make Perl scripts recognize parameters in the Win32 cmd console?

按照这2个描述去修改, 仍旧无法修复.
但是唯一确定的是, 肯定是和文件关联相关的. 下面是几个命令

C:\>assoc .pl  //查看 .pl 文件是关联那个Key
.pl=PerlScript
C:\>ftype PerlScript
PerlScript="C:\Perl\bin\perl.exe" "%1" %*

说明如果你直接运行 .pl 文件, 是在前面加上 C:\Perl\bin\perl.exe 的, 文件名是第一个参数, 后面是其他选项.

解决问题:
打开windows的注册表, 搜索 perl.exe, 如果你看到

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

把它改为:

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