hob*_*bbs 12
for (1 .. 9) {
next if $_ % 2;
print;
}
Run Code Online (Sandbox Code Playgroud)
打印"2468",因为每次$_都是奇数,next跳出循环并继续下一个数字.
for (1 .. 9) {
redo if $_ % 2;
print;
}
Run Code Online (Sandbox Code Playgroud)
永远循环并且不打印因为1是奇数,所以redo跳回到循环体的开头而不推进循环,所以$_保持1并且什么也没发生.
next将进入foreach循环中的下一个项目; redo惯于.next将在C风格的for循环中运行increment(middle)语句; redo惯于.next将在while循环或C风格for循环中重新检查条件; redo惯于.next将退出裸循环({ ... }); redo将重启它.next会跑一个continue街区; redo惯于.在语义上,next完成当前迭代,然后执行之后发生的任何事情.再次redo运行当前迭代的所有代码.就像跳到块的底部(事实上,如果你在一个不是循环的块中使用它,它只会跳到最后),就像跳到块的顶部(事实上,你可以用做循环... 相当于.nextredoredo{ print "Hello"; redo }while (1) { print "Hello" }
Bor*_*din 11
redo,next并在Perl中的循环块last内部使用.大多数情况下,您会看到它们或块,但如果需要,您可以在裸块中使用它们forwhile
本质区别是
redo跳到街区的开头 - 开口大括号{next跳到块的末尾 - 结束括号}last 完全跳出了街区next并且last仅对于块while和for循环(以及具有continue节的块)不同
所以你可以写一个像这样的循环
my $n;
{
++$n;
print $n, "\n";
redo if $n < 10;
}
Run Code Online (Sandbox Code Playgroud)
这将打印从1到10的数字
| 归档时间: |
|
| 查看次数: |
3292 次 |
| 最近记录: |