Dav*_* W. 27 perl if-statement break flow-control
刚出现这个问题:我如何突破if声明?我有一个很长的if语句,但有一种情况我可以在早期就突破它.
在循环中,我可以这样做:
while (something ) {
last if $some_condition;
blah, blah, blah
...
}
Run Code Online (Sandbox Code Playgroud)
但是,我可以使用if语句执行相同的操作吗?
if ( some_condition ) {
blah, blah, blah
last if $some_other_condition; # No need to continue...
blah, blah, blah
...
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以将if语句放在一个块中,然后我可以突破块:
{
if ( some_condition ) {
...
last if $some_other_condition; # No need to continue...
blah, blah, blah
...
}
}
Run Code Online (Sandbox Code Playgroud)
或者,我可以创建一个子程序(可能以编程方式更好):
if ( some_condition ) {
run_subroutine();
}
sub run_subroutine {
blah, blah, blah
return if $some_other_condition;
blah, blah, blah
...
}
Run Code Online (Sandbox Code Playgroud)
但是,无论如何退出if条件?
问题出现了,因为我正在用他们的代码帮助某人.在一个相当长的if声明中,其中if嵌入了其他几个语句.代码看起来像这样:
if ( $condition1 ) {
blah, blah, blah;
if ( not $condition2 ) {
blah, blah, blah;
if ( not $condition3 ) {
blah, blah, blah;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我认为通过这样做可以使整个事情更具可读性:
if ( $condition1 ) {
last if $condition2;
blah, blah, blah;
last if $condition3;
blah, blah, blah;
}
Run Code Online (Sandbox Code Playgroud)
这表明,正常流动if的语句是标准的,但在一定条件下,该if声明被提前退出-就像使用if或last在一个next或while循环退出循环.
我喜欢mpapec使用标签的解决方案 - 即使我不使用标签本身.标签是我的描述for:
IF-UNDER-CONDITION1:
{
if ( $condition1 ) {
last if $condition2;
blah, blah, blah;
last if $condition3;
blah, blah, blah;
}
}
Run Code Online (Sandbox Code Playgroud)
虽然它不是标准的编码技术,但代码的流程非常明显,以至于典型的低级Perl开发人员(我离开后必须维护此代码的开发人员)可以弄清楚代码正在做什么并维护它.他们甚至可能在此过程中学到一些东西.
Сух*_*й27 27
您可以使用基本块这是受last,next而且redo,所以从中可以休息.
if ($condition) {EXIT_IF:{
last EXIT_IF; # break from code block
print "never get's executed\n";
}}
Run Code Online (Sandbox Code Playgroud)
EXIT_IF: {
if ($condition) {
last EXIT_IF; # break from code block
print "never get's executed\n";
}
}
Run Code Online (Sandbox Code Playgroud)