如何在 Perl 中将外循环与内循环分开?

发布于 2024-09-18 22:16:50 字数 467 浏览 11 评论 0原文

假设我有一段 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() 为 true,我想中断('last')所有循环。

我怎样才能做到这一点? 我想到了两个选择,但我都不喜欢: 使用GOTO 添加一个布尔变量来标记 something() 为 true,在每个循环恢复之前检查该变量,并检查 last() 如果它为 true。

有什么建议或想法吗?

谢谢。

Suppose I have a piece of Perl code like:

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
}

If something() is true, I would like to break ('last') all the loops.

how can I do that?
I thought of two options, both of which I don't like:
Using something GOTO
Adding a boolean variable which will mark something() is true, check this var in each of the loops before they resume and last() if it's true.

Any suggestions or thoughts?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

任谁 2024-09-25 22:16:50

使用标签:

OUTER:
foreach my $x (@x) {
 foreach my $y (@z) {
  foreach my $z (@z) {
   if (something()) {
    last OUTER;
   }
   # do stuff 
  }
  # do stuff
 }
 # do stuff
}

Use a label:

OUTER:
foreach my $x (@x) {
 foreach my $y (@z) {
  foreach my $z (@z) {
   if (something()) {
    last OUTER;
   }
   # do stuff 
  }
  # do stuff
 }
 # do stuff
}
む无字情书 2024-09-25 22:16:50

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

The "last LABEL" syntax is described in the documentation.

偷得浮生 2024-09-25 22:16:50

请注意,您也可以在一个衬垫中完成此操作。使用关键字 LINE。例如 perl -ane 'next if length$F[5]!=1; for(split/,/,$F[6]){如果长度$_!=1则下一行};打印'

Note that you can also do this in a one liner. Use the keyword LINE. e.g. perl -ane 'next if length$F[5]!=1; for(split/,/,$F[6]){next LINE if length$_!=1}; print'

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文