24

假设我有一段 Perl 代码,例如:

foreach my $x (@x) {
 foreach my $y (@z) {
  foreach my $z (@z) {
   if (something()) {
    # I want to break free!
   }
   # do stuff 
  }
  # do stuff
 }
 # do stuff
}

如果something()是真的,我想打破('last')所有循环。

我怎样才能做到这一点?我想到了两个选项,这两个选项我都不喜欢: 使用某些东西GOTO 添加一个将标记something()为 true 的布尔变量,在每个循环恢复之前检查这个 varlast()是否为 true。

有什么建议或想法吗?

谢谢。

4

2 回答 2

44

使用标签:

OUTER:
foreach my $x (@x) {
 foreach my $y (@z) {
  foreach my $z (@z) {
   if (something()) {
    last OUTER;
   }
   # do stuff 
  }
  # do stuff
 }
 # do stuff
}
于 2010-09-14T11:47:56.507 回答
16

“last LABEL”语法在文档中进行了描述。

于 2010-09-14T11:51:50.457 回答