问题: Windows XP 没有将命令行参数传递给 perl 脚本。
症状:一个简单的命令,如:
say "Argument 1 (\$ARGV[0]) is: $ARGV[0], argument 2 (\$ARGV[1]) is: $ARGV[1].";
结果:
Use of uninitialized value $ARGV[0] in concatenation (.) or string at...
解决方案:
根本问题出在 Windows XP 中。启动 perl 的默认方法只传递第一个变量,即脚本名称。结果是 $ARGV[0] 未初始化。
修复方法是在以下位置编辑 Windows 注册表:
\HKEY_CLASSES_ROOT\Perl\shell\Open\command
并输入:
"C:\Perl\bin\perl.exe" %*
结果是:
C:\whatever>perl argtest.pl 1 2
Argument 1 ($ARGV[0]) is: 1, argument 2 ($ARGV[1]) is: 2.
特别感谢 David W,他为我指明了正确的方向。