一般来说,避免GOTO是一个很好的做法。记住这一点,我一直在和同事辩论这个话题。
请考虑以下代码:
Line: while( <> ) { next Line if (insert logic); }
使用循环标签计数为goto吗?
这是什么perlsyn在perldoc不得不说:
Here’s how a C programmer might code up a particular algorithm in Perl:
for (my $i = 0; $i < @ary1; $i++) { for (my $j = 0; $j < @ary2; $j++) { if ($ary1[$i] > $ary2[$j]) { last; # can't go to outer :-( } $ary1[$i] += $ary2[$j]; } # this is where that last takes me }
Whereas here’s how a Perl programmer more comfortable with the idiom might do it:
OUTER: for my $wid (@ary1) { INNER: for my $jet (@ary2) { next OUTER if $wid > $jet; $wid += $jet; } }
我认为,这并不是因为你明确地告诉一个循环来做短路,然而我的同事不同意,说这只是一个花哨的GOTO,应该避免。我正在寻找一个引人注目的论据或文档,解释为什么这是或不是GOTO。我也会接受一个解释,为什么这是或不被认为是perl的好习惯。