问题: 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.
特别是由于大卫W¯¯谁指出我在正确的方向。
你链接的教程不是很高的质量。它甚至没有“严格使用”。 – simbabque 2013-04-04 20:51:47
幽默我:试试'argtest 1 2 3',看看会发生什么。 – 2013-04-04 20:52:30
我尝试了你的代码(Mac OS X 10.7.5上的Perl 5.16.2;离你的平台很远),并且用'x.pl 1 2',我得到了'在串联(。)或字符串中使用未初始化的值'和输出 '参数0:1,参数1:2,参数2:.'我想知道你的Perl是否会误导你(尽管你的输出与'$ ARGV [0 ]未被初始化)。请记住,'$ 0'包含脚本的名称; '$ ARGV [0]'包含脚本的第一个参数的名称。 – 2013-04-04 20:54:41