Perl+PerlCritic|循环迭代器不是词法迭代器



我有这个代码

...
    my $line = '';
        foreach $line ( split( /n/x, $raw ) ) {
            chomp $line;
            my ( $key, $val ) = split( /=/x, $line );
            $param{$key} = $val;
        }
...

经过perlcritic检查,我得到消息"循环迭代器不是词法的。"怎么了?

我可以使用

 #my $line = '';
            foreach my $line ( split( /n/x, $raw ) )

但为什么?:)

PerlCritic希望循环变量在循环中只有一个作用域,即循环结束后变量不应存在。这可能被认为过于纯粹/迂腐,但我倾向于同意,并且通常也会以这种方式编写Perl代码。

此外,这看起来像是一个可配置的选项

来自cpan Perl::Critic::Policy::Variables::RequireExicalLoopIterators!

在你看到这样的代码之前,这可能看起来不是什么大不了的事情

my $bicycle;
for $bicycle (@things_attached_to_the_bike_rack) {
    if (
            $bicycle->is_red()
        and $bicycle->has_baseball_card_in_spokes()
        and $bicycle->has_bent_kickstand()
    ) {
        $bicycle->remove_lock();
        last;
    }
}
if ( $bicycle and $bicycle->is_unlocked() ) {
    ride_home($bicycle);
}

这将不允许你及时到达与家人共进晚餐,因为环路外的$自行车不会因环路而改变。你可能已经解锁了你的自行车,但你不记得是哪辆了。

相关内容

  • 没有找到相关文章

最新更新