内联for循环如何与打印交互?

问题描述 投票:0回答:1

这是一个代表:

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"
会给出有效的代码。我尝试过以不同的方式将表达式括起来,但它们会导致错误。

for-loop perl foreach
1个回答
0
投票

这使用了

foreach
语句修饰符

发生的事情是这样的:

  1. foreach (
    @array, "\n"
    ) 之后的表达式在列表上下文中计算。
  2. 对于产生的每个标量,
    1. $_
      是该标量的别名。
    2. 计算
      foreach
      (
      print
      ) 之前的表达式。

这类似于以下内容:

foreach ( @array, "\n" ) {
   print;
}

但是,在语句修饰符版本中,块没有创建作用域,并且不能使用

next
last
redo
来影响循环。

© www.soinside.com 2019 - 2024. All rights reserved.