9

我发现在 Perl 子例程中使用标签,打破多个循环,或者用更新的变量重做某些部分,非常有帮助。社区如何看待这种编码风格?在子程序中使用标签是否令人不悦?

4

3 回答 3

17

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

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

于 2009-10-28T09:06:22.907 回答
12

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

goto LABEL强烈建议不要使用。

于 2009-10-28T13:20:45.590 回答
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;
  }
}
于 2009-10-28T16:45:46.710 回答