Perl -'next'和'continue'的区别?

eagi6jfj  于 2023-06-30  发布在  Perl
关注(0)|答案(2)|浏览(157)

快速Perl问题:当执行一个循环(比如说while循环)时,nextcontinue命令有什么区别?我以为都是跳到下一个循环。

m1m5dgzv

m1m5dgzv1#

continue关键字可以在循环的块后 * 使用。continue块中的代码在下一次迭代之前执行(在循环条件求值之前)。它不影响控制流。

my $i = 0;
when (1) {
  print $i, "\n";
}
continue {
  if ($i < 10) {
    $i++;
  } else {
    last;
  }
}

几乎相当于

foreach my $i (0 .. 10){
  print $i, "\n";
}

continue关键字在given-when结构中有另一种含义,Perl的switch-case。在执行when块之后,Perl会自动执行break,因为大多数程序都会这样做。如果你想 fall through 到下一个案例,必须使用continue。这里,continue修改控制流。

given ("abc") {
  when (/z/) {
    print qq{Found a "z"\n};
    continue;
  }
  when (/a/) {
    print qq{Found a "a"\n};
    continue;
  }
  when (/b/) {
    print qq{Found a "b"\n};
    continue;
  }
}

将打印

Found a "a"
Found a "b"

next关键字仅在循环中可用,并导致新的迭代,包括。循环条件的重新评估。redo跳转到循环块的开头。不计算循环条件。

lzfw57am

lzfw57am2#

执行 next 语句将跳过执行该特定迭代的循环中的其余语句。

  • continue* 块中的语句将在每次迭代中执行,而不管循环是照常执行还是循环需要通过遇到 next 语句来终止特定的迭代。

不带 continue 块的示例:

my $x=0;
while($x<10)
{
    if($x%2==0)
    {
        $x++; #incrementing x for next loop when the condition inside the if is satisfied.
        next;
    }
    print($x."\n");
    $x++;  # incrementing x for the next loop 
}

在上面的例子中,x的增量需要写入2次。但是如果我们使用continue语句,它可以保存所有需要执行的语句,我们只能在continue循环中递增x一次。

my $x=0;
while($x<10)
{
    if($x%2==0)
    {
        next;
    }
    print($x."\n");
}
continue
{
        $x++;
}

两种情况下的输出都是1,3,5,7,9

相关问题