我有一个问题是在双嵌套while循环中突破最内层的封闭循环.考虑:
use v5.14;
my $i=0;
while ($i<=1) {
my $j=0;
do {
last if $j==2;
say $j++;
} while ($j<4);
$i++;
}
Run Code Online (Sandbox Code Playgroud)
输出在这里:
0
1
Run Code Online (Sandbox Code Playgroud)
而预期的产出应该是:
0
1
0
1
Run Code Online (Sandbox Code Playgroud)
在最里面的封闭循环中添加标签:
my $i=0;
while ($i<=1) {
my $j=0;
LINE: do {
last LINE if $j==2;
say $j++;
} while ($j<4);
$i++;
}
Run Code Online (Sandbox Code Playgroud)
给出错误:
Label not found for "last LINE" at ./p.pl line 9.
Run Code Online (Sandbox Code Playgroud)
您只能使用last,next并且redo在使用a的循环中BLOCK.
while (EXPR) BLOCKuntil (EXPR) BLOCKfor (LIST) BLOCKfor (EXPR; EXPR; EXPR) BLOCKBLOCK你不能在语句修饰符[1]创建的循环上使用它们.
EXPR while EXPR;EXPR until EXPR;do BLOCK while EXPR;只是一个例子EXPR while EXPR;.循环没有BLOCKfor for lastwork.它只是一个while修改do函数[2]的语句修饰符.do被修改的函数有一个BLOCK但do不是循环.
你可以添加一个循环last,例如一个BLOCK通常只执行一次的裸循环().
my $i=0;
while ($i<=1) {
LOOP: {
my $j=0;
do {
last if $j==2;
say $j++;
} while ($j<4);
}
++$i;
}
Run Code Online (Sandbox Code Playgroud)
但如果我们能确保++$i总是执行,我们可以只是next外循环.
my $i=0;
while ($i<=1) {
my $j=0;
do {
next if $j==2;
say $j++;
} while ($j<4);
} continue {
++$i;
}
Run Code Online (Sandbox Code Playgroud)
以上简化为
for (my $i=0; $i<=1; ++$i) {
my $j=0;
do {
next if $j==2;
say $j++;
} while ($j<4);
}
Run Code Online (Sandbox Code Playgroud)
这简化为
for my $i (0..1) {
my $j=0;
do {
next if $j==2;
say $j++;
} while ($j<4);
}
Run Code Online (Sandbox Code Playgroud)
当然,这假设我们需要保留do while.如果没有,我们可以写
for my $i (0..1) {
for my $j (0..3) {
last if $j==2;
say $j;
}
}
Run Code Online (Sandbox Code Playgroud)
或者我想.原来它适用于for!!!!
>perl -we"print($_), (($_ == 5) && last) for 1..10; print(qq{\ndone\n});"
12345
done
Run Code Online (Sandbox Code Playgroud)好吧,不是"仅仅".它特别容易进行底部测试,而不是经过顶级测试.
你不能使用lastinsidedo{}块,但你可以
my $i=0;
while ($i<=1) {
my $j=0;
LINE: {
do {
last LINE if $j==2;
say $j++;
} while ($j<4);
}
$i++;
}
Run Code Online (Sandbox Code Playgroud)
或者
my $i=0;
OUTER: while ($i<=1) {
my $j=0;
LINE: do {
next OUTER if $j==2;
say $j++;
} while ($j<4);
}
continue {
$i++;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2574 次 |
| 最近记录: |