如何检查代码是否由于最后一个命令退出循环?

时间:2011-03-14 05:34:11

标签: perl loops

在循环中,我有几个条件,如果条件不满足,我会使用last语法退出循环。

while (condition) {
    if (possibility 1) {
        ...
        last;
    }

    if (possibility 2) {
        if (possibility 3) {
            ...
            last;
        }
        ...
        last;
    }
}

在我退出循环之后,我需要知道我是否使用了最后一个退出,或条件不再适用。这样做的一种方法是编写一个否定所有可能性的if语句。

我正在寻找一些更简单/更优雅的方法来做到这一点。

是否有一些Perl变量存储由于last而退出循环的信息?或者我是否需要自己维护这样的变量?

3 个答案:

答案 0 :(得分:5)

你几乎需要在退出前设置一个标志

答案 1 :(得分:0)

你可以尝试使用变量的值来检查,像这样的重构可以工作:

while (condition) {
    if (possibility 1) {
        ...
        $satisfies_condition = 1;
    }

    if (possibility 2) {
        if (possibility 3) {
            ...
            $satisfies_condition = 3;
        }
        ...
        $satisfies_condition = 2;
    }

    last if $satisfies_condition;
}

根据$satisifies_condition的值,您可以确定断点

答案 2 :(得分:0)

我在阅读问题时的初步想法恰好与先前的答案所假设的相反:你不关心哪个条件导致循环提前退出,只是循环退出或者不。鉴于您正在使用while循环,这很容易且自然地完成,不需要任何额外的标志变量,除非您的某个分支在调用{{1}之前将其更改为condition以使其为假}}:

last

如果您的早期退出也会导致while (condition) { # blah, blah, blah } if (condition) { # condition is still true, loop must have exited early due to "last" } else { # loop exited because condition is no longer true } 错误,那么您需要添加一个标记来跟踪最后一次迭代是否一直运行:

condition