在Perl子程序中使用标签被认为是一种不好的做法吗?

时间:2009-10-28 08:56:29

标签: perl coding-style label subroutine

我发现在Perl子程序中使用标签,从多个循环中断,或者用更新的变量重做某些部分,非常有帮助。社区如何看待这种编码风格?在子程序中使用标签不受欢迎吗?

3 个答案:

答案 0 :(得分:17)

没有。它们完全符合您描述的目的,我认为它们是使用得太少的语言的一个很好的特性。

另一方面,每当我发现自己在思考标签的使用时,我也会发现自己想知道我的代码是否需要进行一些重构。

答案 1 :(得分:12)

使用nextlastredo的标签很好,但您应该暂停考虑代码结构是否是最佳的。根据我的经验,你很少需要在封闭循环之外的任何东西上使用这些操作符(这意味着你不需要使用标签)。

强烈建议不要使用goto LABEL

答案 2 :(得分:8)

通常没有理由使用goto LABEL

例如:

my $i = 10;
Label:
# ...
goto Label if --$i;

最好写成:

my $i = 10;
{
  # ...
  redo if --$i;
}

我能想到使用标签的唯一原因是打破多个循环,或继续外循环。

my $i = 10;
OUTER: while(1){
  # ...
  while(1){
    # ...
    last OUTER unless --$i;
  }
}
my $i = 10;
OUTER: {
  # ...
  {
    # ...
    redo OUTER if --$i;
  }
}