gpt4 book ai didi

PerlCritic 示例 : loop iterator is not lexical

转载 作者:行者123 更新时间:2023-12-05 05:51:37 25 4
gpt4 key购买 nike

在调试一些较旧的 perl 代码时,我使用 perl critic 来发现错误。我经常偶然发现这个“循环迭代器不是词法”策略: Perl::Critic::Policy::Variables::RequireLexicalLoopIterators而且它从来都不是错误。当我在测试程序中实现作者的示例时,我似乎没有重现它试图解决的问题:

#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;

my $bicycle = {is_red => 1, has_baseball_card_in_spokes => 1, has_bent_kickstand => 1, locked => 1};

my $bicycle1 = {is_green => 1, has_baseball_card_in_spokes => 1, has_bent_kickstand => 1, locked => 1};

my $bicycle2 = {is_blue => 1, has_baseball_card_in_spokes => 0, has_bent_kickstand => 0, locked => 1};

my @things_attached_to_the_bike_rack = ($bicycle,$bicycle1,$bicycle2);

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->{locked} = 0;

last;
}
}

if ( $bicycle and !$bicycle->{locked} ) {
print "riding home in time for dinner\n";
}

不可否认,我没有用函数创建一个有福的对象,而是一个散列引用,所以它可能与 Perl 中的对象有关。即使我重新安排数组的顺序,我每次都会准时回家吃晚饭。所以我一定遗漏了一些明显的东西,我想要一个可重现的例子来说明这是一个问题。

我意识到有 old questions about this ,但我想知道这是否仍然是 2021 年底的相关政策。

最佳答案

您的代码与策略示例不同。您的代码在循环外为 $bicycle 赋值,而策略示例没有。

以下是更接近地表示策略示例意图的代码:

use strict;
use warnings;
use diagnostics;

my $bicycle0 = {is_red => 1, has_baseball_card_in_spokes => 1, has_bent_kickstand => 1, locked => 1};
my $bicycle1 = {is_green => 1, has_baseball_card_in_spokes => 1, has_bent_kickstand => 1, locked => 1};
my $bicycle2 = {is_blue => 1, has_baseball_card_in_spokes => 0, has_bent_kickstand => 0, locked => 1};

my @things_attached_to_the_bike_rack = ($bicycle0, $bicycle1, $bicycle2);

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->{locked} = 0;

last;
}
}

if ( $bicycle and !$bicycle->{locked} ) {
print "riding home in time for dinner\n";
}

当我运行它时,我没有看到 准时回家吃晚饭 消息,正如预期的那样,就像我在运行您的原始代码时看到的那样。

关于PerlCritic 示例 : loop iterator is not lexical,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70351334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com