这是一个代表:
use strict;
use warnings;
my @array = ("word1", "word2");
print foreach @array, "\n";
效果是打印“word1word2 ”。问题来了:这行代码实际上是如何被 Perl 解释器解析的?
我想我明白
print foreach @array;
会做什么。我的理解是,这是一个内联循环,本质上相当于以下 foreach
块:
foreach @array {
print; # i.e. print $_;
}
但是,我很不清楚为什么附加
"\n"
会给出有效的代码。我尝试过以不同的方式将表达式括起来,但它们会导致错误。
这使用了
foreach
语句修饰符。
发生的事情是这样的:
@array, "\n"
) 之后的表达式在列表上下文中计算。$_
是该标量的别名。foreach
(print
) 之前的表达式。这类似于以下内容:
foreach ( @array, "\n" ) {
print;
}
但是,在语句修饰符版本中,块没有创建作用域,并且不能使用
next
、last
或 redo
来影响循环。