问题描述
人们经常以各种方式询问它,但是,我将再次提出问题,因为我没有完全理解@ARGV
的应用,并且因为我没有找到解决该问题的答案(或更可能是,我不明白已经提供的答案和解决方案。
问题是,为什么不能从命令行读取任何内容?另外,我该如何解密错误消息,
在串联(。)中使用未初始化的值$ name或在...处使用字符串?
我知道@ARGV
是一个存储命令行参数(文件)的数组。我也了解它可以像其他任何数组一样进行操作(记住索引$ARGV[0]
与文件名变量$0
的命令行功能不同)。我了解到,在while循环中,菱形运算符会在读取输入时自动将shift
的第一个元素@ARGV
设为$ARGV[ ]
。
我不了解的是如何将@ARGV
的元素分配给标量变量,然后打印原点。例如(代码概念取自Learning Perl),
my $name = shift @ARGV;
while (<>) {
print “The input was $name found at the start of $_\n”;
exit;
}
按代码所示,$name
的输出为空白;如果我省略shift()
,$name
会在标量上下文中输出0
,正如我认为的那样,但是它不能回答为什么从命令行输入的问题也不会被接受您的见解将不胜感激。
谢谢。
解决方法
[[0 3]
[1 4]
[2 3]
[6 5]
[7 6]]
确实确实分配了程序的第一个参数。如果您得到my $name = shift @ARGV;
,那是因为您没有为程序提供任何参数。
Use of uninitialised value $name in concatenation (.) or string at ...
之后使用$ perl -we'my $name = shift(@ARGV); print "My name is $name.\n"'
Use of uninitialized value $name in concatenation (.) or string at -e line 1.
My name is .
$ perl -we'my $name = shift(@ARGV); print "My name is $name.\n"' ikegami
My name is ikegami.
绝对没有问题。
<>