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

Geo*_*Geo 9 perl label coding-style subroutine

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

inn*_*naM 17

不.它们完全符合您描述的目的,我认为它们是语言的一个很好的功能,使用得太少.

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

  • 有时确实如此,有时却没有.我总是寻求更容易阅读和理解的代码.有时这是使用标签的代码. (2认同)
  • Perl Best Practices赞成标签.我不同意所有的PBP,但我认为这是其中一条好建议.如果没有别的话,它们就作为文件. (2认同)

Mic*_*man 12

使用标签带next,lastredo是好的,但你应该停下来考虑代码结构是否是最好的之一.根据我的经验,你很少需要在封闭循环以外的任何东西上使用这些运算符(这意味着你不需要使用标签).

goto LABEL强烈建议不要使用.


Bra*_*ert 8

通常没有理由使用goto LABEL.

例如:

my $i = 10;
Label:
# ...
goto Label if --$i;
Run Code Online (Sandbox Code Playgroud)

最好写成:

my $i = 10;
{
  # ...
  redo if --$i;
}
Run Code Online (Sandbox Code Playgroud)

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

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