对于(1)总是与perl中的相同吗?

ask*_*ker 4 perl

for(1){
  print 1;
}

do {
  print 1;
}
Run Code Online (Sandbox Code Playgroud)

这是真的吗?

或者是否有任何特殊情况这两个不相等?

Fli*_*mzy 13

一个区别是for(1)将$ _设置为值1,以及:

for(1){
    print $_;  # prints 1
}
Run Code Online (Sandbox Code Playgroud)

此外,do返回序列中最后一个命令的值:

my $x = do { 1 };  # $x = 1
my $y = for(1){ 1 }; # invalid
Run Code Online (Sandbox Code Playgroud)


ike*_*ami 6

你可能真的在寻找简单的曲线.

{
   print 1;
}
Run Code Online (Sandbox Code Playgroud)

它有以下好处:

  • 创建一个词法范围(如for (1)和do {}).
  • 您可以使用next,last并redo在他们(像for (1)).
  • 它没有掩盖$_(像do {}).

但

  • 它只能用于预期语句的地方(比如for (1)但不同do {}).

因此,{ ... }比想要返回值更有意义for (1) { ... },并且do { ... }非常有用.


Axe*_*man 5

差不多.

  • 你可以next,last和redo一for环,但do不是一个循环-包括作为的一部分do- while"循环".所以在一个非平凡的块中,你无法确定.但是,这将有效:

    do {{
        ...
    }};
    
    Run Code Online (Sandbox Code Playgroud)
  • 也do不会自动设置$_列表的每个成员,裸for循环的方式.