以下代码将生成警告。 (原因是因为你需要将
1,2,3
括在括号中)。
$ perl -wE'my @foo = 1,2,3;'
Useless use of a constant (2) in void context at -e line 1.
Useless use of a constant (3) in void context at -e line 1.
但是这段代码不会生成警告,
$ perl -wE'sub foo {1}; sub bar {2}; sub baz {3}; my @foo = foo(), bar(), baz();
这对我来说似乎很尴尬。虽然在 void 上下文中执行
foo()
和 baz()
似乎是合理的,但这似乎没有用,也不像是应该鼓励的事情。如果不出意外,您可能会认为启用警告后捕获上述问题是理想的选择。
这个警告不存在有什么原因吗?
my @x = EXPR1, EXPR2, EXPR3;
意味着
( my @x = EXPR1 ), EXPR2, EXPR3;
由于它是在 void 上下文中评估的,所以它相当于
( my @x = EXPR1 ); EXPR2; EXPR3;
或者只是
my @x = EXPR1; EXPR2; EXPR3;
以下肯定是错误的,值得警告:
my @foo = 1; 2; 3;
但是你能对以下内容说同样的话吗?
my @foo = foo(); bar(); baz();