gpt4 book ai didi

perl - 这个 perl 代码中 $_ 在哪里被修改?

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

以下 perl 代码在 PerlCritic 中生成警告(通过 Activestate):

sub natural_sort {
my @sorted;
@sorted = grep {s/(^|\D)0+(\d)/$1$2/g,1} sort grep {s/(\d+)/sprintf"%06.6d",$1/ge,1} @_;
}

生成的警告是:

Don't modify $_ in list functions



More info about that warning here

我不明白警告,因为我认为我没有修改 $_,尽管我想我必须这样做。
有人可以向我解释一下吗?

最佳答案

您的grep s 正在修改 $_因为你正在使用 s// .例如,这个:

grep {s/(^|\D)0+(\d)/$1$2/g,1}

与此相同:
grep { $_ =~ s/(^|\D)0+(\d)/$1$2/g; 1 }

我认为你最好使用 map因为你没有用你的 grep 过滤任何东西s,你只是在使用 grep作为迭代器:
sub natural_sort {
my $t;
return map { ($t = $_) =~ s/(^|\D)0+(\d)/$1$2/g; $t }
sort
map { ($t = $_) =~ s/(\d+)/sprintf"%06.6d",$1/ge; $t }
@_;
}

那应该做同样的事情并让评论家保持安静。您可能想看看 List::MoreUtils 如果你想要一些比普通的更好的列表运算符 map .

关于perl - 这个 perl 代码中 $_ 在哪里被修改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5894332/

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