我发现在Perl子程序中使用标签,从多个循环中断,或者用更新的变量重做某些部分,非常有帮助。社区如何看待这种编码风格?在子程序中使用标签不受欢迎吗?
答案 0 :(得分:17)
没有。它们完全符合您描述的目的,我认为它们是使用得太少的语言的一个很好的特性。
另一方面,每当我发现自己在思考标签的使用时,我也会发现自己想知道我的代码是否需要进行一些重构。
答案 1 :(得分:12)
使用next
,last
和redo
的标签很好,但您应该暂停考虑代码结构是否是最佳的。根据我的经验,你很少需要在封闭循环之外的任何东西上使用这些操作符(这意味着你不需要使用标签)。
强烈建议不要使用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;
}
}