Как правило, это хорошая практика, чтобы избегать GOTO. Помня об этом, я спорил с коллегой по этой теме.
Рассмотрим следующий код:
Line:
while( <> ) {
next Line if (insert logic);
}
Считается ли использование метки цикла в качестве перехода?
Вот что perlsyn в perldoc должен сказать:
Вот как программист C может кодировать определенный алгоритм в 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
}
В то время как вот как программист Perl более комфортно использует идиому:
OUTER: for my $wid (@ary1) {
INNER: for my $jet (@ary2) {
next OUTER if $wid > $jet;
$wid += $jet;
}
}
Я полагаю, что это не так, потому что вы явно указываете петлю на короткое замыкание и продвигаетесь, однако мой коллега не соглашается, говорит, что это просто вычурное GOTO и его следует избегать. Я ищу убедительный аргумент или документацию, объясняющую, почему это GOTO или нет. Я также приму объяснение, почему это является или не считается хорошей практикой в perl.