Perl循环标签计为GOTO?

前端之家收集整理的这篇文章主要介绍了Perl循环标签计为GOTO?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
一般来说,避免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的好习惯。

解决方法

迪克斯特拉斯的意图从来没有像过去那样被认为是有害的东西。就是将代码的结构用作几何任何类型​​的程序流程更改的主要结构都将导致我们今天所说的意大利面条代码

您应该阅读原始文章,并记住它是在1968年写的,当标签跳转是所有编程语言中的主要流控制结构。

http://userweb.cs.utexas.edu/users/EWD/ewd02xx/EWD215.PDF

猜你在找的Perl相关文章