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" %*