Geo*_*Geo 9 perl label coding-style subroutine
我发现在Perl子程序中使用标签,从多个循环中断,或者用更新的变量重做某些部分,非常有帮助.社区如何看待这种编码风格?在子程序中使用标签不受欢迎吗?
inn*_*naM 17
不.它们完全符合您描述的目的,我认为它们是语言的一个很好的功能,使用得太少.
另一方面,每当我发现自己在思考标签的使用时,我也会发现自己想知道我的代码是否需要进行一些重构.
Mic*_*man 12
使用标签带next,last和redo是好的,但你应该停下来考虑代码结构是否是最好的之一.根据我的经验,你很少需要在封闭循环以外的任何东西上使用这些运算符(这意味着你不需要使用标签).
goto LABEL强烈建议不要使用.
通常没有理由使用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)