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