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

时间:2012-08-22 21:41:27

标签: perl loops

Quick Perl问题:当经历一个循环(比如说一个while循环)时,nextcontinue命令有什么区别?我认为两者都跳到循环的下一次迭代。

2 个答案:

答案 0 :(得分:17)

循环的块之后,可以使用 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,因为大多数程序都会执行此操作。如果您希望通过到下一个案例,则必须使用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跳转到循环块的开头。不评估循环条件。

答案 1 :(得分:1)

执行 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