gpt4 book ai didi

regex - 在 perl 中使用 foreach 代替 map 和 grep

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

my @a_columns = map { s/^"|"$|\n|\r|\n\r|"//g; $_ } split /;/, $s_act_line;

上面提到的是我的代码。由于使用了 map 功能,我在合并此代码时收到自动警告。请帮助我使用 for 或 foreach 或任何循环来转换它。

我已经尝试了几种方法,但都不适合我。

请大家帮帮我

enter image description here

最佳答案

警告似乎跟在 Perl::Critic 之后(即使它似乎是由您的 IDE 发布的)。

map 以及 grepforeach 中的变量 $_ 是当前处理的数组元素。因此,一旦它发生变化,输入 数组就会发生变化!这通常是不需要的,并且通常可以肯定地被认为是一种棘手的做法,因此发出警告。

但在这种情况下,map 的输入是由 split 生成的列表,用于您的变量。所以 map block 中的代码不能通过更改 $_ 来更改变量。然后告诉 Perl::Ciriticignore 是安全的这个声明

my @a_columns = 
map { s/^"|"$|\n|\r|\n\r|"//g; $_ } split /;/, $s_act_line; ## no critic

或多个语句

## no critic

... code that Perl::Critic should ignore

## use critic

如果警告确实是由 Perl::Critic(而不是 IDE)产生的,那么应该停止它。

更好的是,map block 中使用的习语在 5.14 的 Perl 版本中不再需要,因为我们得到了 non-destructive substitution。 . s///r 返回更改后的字符串,保持原始字符串不变。所以你可以这样做

my @a_columns = map { s/^"|"$|\n|\r|\n\r|"//gr } split /;/, $s_act_line;

这也更清洁、更安全。现在 Perl::Critic 不应该标记这个。

关于regex - 在 perl 中使用 foreach 代替 map 和 grep,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70676350/

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