在Perl中使用带有while循环的continue块是否有优势?

时间:2017-09-28 14:32:53

标签: perl

语法1:

while {
#some code 
}
continue {
#some other code 
}

语法2:

while {
#some code 
#some other code
}

SYNTAX 1是否比SYNTAX 2有任何优势?假设“某些代码”和“其他代码”在两种语法中保持相同的行集。或者它只有两种不同的样式没有编码优势。

1 个答案:

答案 0 :(得分:6)

当您从循环中间调用continue时,next块会执行,因此它提供了一种在迭代之间执行某些公共代码的方法,而不管每次迭代的执行路径。 / p>

比较

my $last_item;
for my $item (@list) {
   if ($last_item eq $item) {
       do_something();
       $last_item = $item;
       next;
   }

   if (condition2($item,$last_item)) {
       $last_item = $item;
       next;
   }

   do_something_else();
   $last_item = $item;
}

my $last_item;
for my $item (@list) {
   if ($last_item eq $item) {
       do_something();
       next;
   }

   if (condition2($item,$last_item)) {
       next;
   }

   do_something_else();
} continue {
   $last_item = $item;
}

野外continue的一些例子:

HTTP::Cookies

PPIx::Regexp::Node

PDL::Core