这是我的代码..
while (1) {
do_stuff;
do_some_checks;
do { warn error 1; last } if not OK;
do_more_stuff;
do_some_checks;
do { warn error 2; last } if not OK;
do_even_more_stuff;
do_some_checks;
do { warn error 3; last } if not OK;
...
#finally
last;
}
我更喜欢下面的那个:
do_stuff;
do_some_checks;
if (!OK) {
warn error 1;
} else {
do_more_stuff;
do_some_checks;
if (!OK) {
warn error 2;
} else {
do_even_more_stuff;
do_some_checks;
if (!OK) {
...
}
# finally
success!
}
}
每次都会遇到我唯一的事情,有时我会忘记添加最终的last
,导致无限循环。但是这一系列的检查和早期保释模式在我的代码中经常发生,构造很快成为第二天性。
任何人都有相同的习惯,或者使用某种替代方案会有所帮助。
提前致谢。
答案 0 :(得分:7)
##
# This sub does three things:
# thing1,
# thing2,
# thing3
sub do_three_things {
do_stuff;
do_some_checks;
do { warn error 1; return } if not OK;
do_more_stuff;
do_some_checks;
do { warn error 2; return } if not OK;
do_even_more_stuff;
do_some_checks;
do { warn error 3; return } if not OK;
...
#finally
return; #if you forget this return, the sub will end anyway.
}
do_three_things(); # Call the sub
子的优点:
编辑:正如Hachi所说,你甚至不需要一个sub,只有一个块也适用于last
。但是,我自己更喜欢sub,因此您可以更清楚地分离事物,这样可以更轻松地进行测试和/或代码重用。
答案 1 :(得分:4)
删除while(1)
。
在Perl中,你可以在没有循环的情况下从正常的块{}中“持续”。
我有同样的习惯,直到我学会了perl的灵活性;)
答案 2 :(得分:0)
如果你想要转到,只需使用goto
,不要把它伪装成一个循环结构。