有时在 Perl 中,我编写了一个 for/foreach 循环,它遍历值以根据列表检查值。第一次命中后,循环可以退出,因为我们已经满足了我的测试条件。例如,这个简单的代码:

my @animals = qw/cat dog horse/;

foreach my $animal (@animals)
{
  if ($input eq $animal)
  {
    print "Ah, yes, an $input is an animal!\n";
    last;
  }
}
# <-----

有没有一种优雅的方式 - 一个重载的关键字,也许 - 来处理“for循环到达最后一个元素”?在上面的箭头处放什么?

我可以想办法做到这一点,比如创建/设置一个额外的 $found 变量并在最后测试它......但我希望 Perl 可能有其他内置的东西,比如:
foreach my $animal (@animals)
{
  if ($input eq $animal)
  {
    print "Ah, yes, an $input is an animal!\n";
    last;
  }
} finally {
  print "Sorry, I'm not sure if $input is an animal or not\n";
}

这将使这个测试更加直观。

最佳答案

您可以使用带标签的块来包装循环,如下所示:

outer: {
    foreach my $animal (@animals) {
        if ($input eq $animal) {
            print "Ah, yes, an $input is an animal!\n";
            last outer;
        }
    }
    print "no animal found\n";
}

关于for-loop - 捕捉 "for loop reached last element"的优雅方式?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53891490/

10-10 08:00