在除錯一些較舊的 perl 代碼時,我使用 perl 評論家作為發現錯誤的一種方式。我經常偶然發現這個“回圈迭代器不是詞法”策略: 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 中的物件有關。即使我重新安排了陣列的順序,我每次也能準時到家吃飯。所以我一定遺漏了一些明顯的東西,我想要一個可重現的例子來說明當這是一個問題時的情況。
我意識到對此存在一些老問題,但我想知道這是否仍然是 2021 年末的相關政策。
uj5u.com熱心網友回復:
您的代碼與策略示例不同。您的代碼$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";
}
當我運行它時,我沒有看到riding home in time for dinner訊息,正如我在運行原始代碼時所做的那樣。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/381741.html
標籤:perl
