在循环中,我有几个条件,如果条件不满足,我会使用last
语法退出循环。
while (condition) {
if (possibility 1) {
...
last;
}
if (possibility 2) {
if (possibility 3) {
...
last;
}
...
last;
}
}
在我退出循环之后,我需要知道我是否使用了最后一个退出,或条件不再适用。这样做的一种方法是编写一个否定所有可能性的if语句。
我正在寻找一些更简单/更优雅的方法来做到这一点。
是否有一些Perl变量存储由于last而退出循环的信息?或者我是否需要自己维护这样的变量?
答案 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