将参数传递给脚本,得到:"使用未初始化的值$ ARGV [0]"

use*_*544 5 perl argv

问题: 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,他指出了我正确的方向.

Bir*_*rei 0

文件perl名不是参数数组的一部分。至少在我所做的测试中,您必须删除ARGV[2]或传递三个参数,例如argtest 1 2 3