Quick Perl问题:当经历一个循环(比如说一个while循环)时,next
和continue
命令有什么区别?我认为两者都跳到循环的下一次迭代。
答案 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