my @a_columns = map { s/^"|"$|\n|\r|\n\r|"//g; $_ } split /;/, $s_act_line;
上面提到的是我的代码。我得到自动警告,而合并此代码,因为使用Map函数。请帮助我转换这使用或foreach或任何循环。我已经尝试了几种方法,但没有一种对我有效。请帮帮我伙计们
vbopmzt11#
该警告显示在Perl::Critic之后(即使它似乎是由IDE发出的)。map中的变量$_,以及grep和foreach中的变量$_,是当前处理的数组元素的别名。因此,一旦它被更改,input 数组也会被更改!这通常是不需要的,并且通常可以肯定地被认为是一种棘手的做法,因此发出了警告。但是在本例中,map的输入是split生成的列表,用于您的变量。因此,map的代码块中的代码不能通过更改$_来更改您的变量。然后,可以安全地告诉Perl::Ciritic忽略此语句
map
$_
grep
foreach
split
Perl::Ciritic
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的块中使用的习惯用法在Perl 5.14以后的版本中是不需要的,因为我们得到了非破坏性的替换。使用它,s///r * 返回 * 改变的字符串,而保持原始字符串不变。所以你可以
Perl::Critic
s///r
my @a_columns = map { s/^"|"$|\n|\r|\n\r|"//gr } split /;/, $s_act_line;
这也更加干净和安全。现在Perl::Critic不应该标记这个。
watbbzwu2#
问题是你正在map中修改$_,这意味着你正在修改传递给map的值。这可能会导致意外。切换到for不会有帮助。在这种情况下,它实际上是无害的,因为split返回临时值,但以下是“干净”的替代方法:第一个
for
2条答案
按热度按时间vbopmzt11#
该警告显示在Perl::Critic之后(即使它似乎是由IDE发出的)。
map
中的变量$_
,以及grep
和foreach
中的变量$_
,是当前处理的数组元素的别名。因此,一旦它被更改,input 数组也会被更改!这通常是不需要的,并且通常可以肯定地被认为是一种棘手的做法,因此发出了警告。但是在本例中,
map
的输入是split
生成的列表,用于您的变量。因此,map
的代码块中的代码不能通过更改$_
来更改您的变量。然后,可以安全地告诉Perl::Ciritic
忽略此语句或用于多个语句
如果警告确实是由
Perl::Critic
(而不是由IDE)生成的,则此操作应该会将其停止。更好的是,在
map
的块中使用的习惯用法在Perl 5.14以后的版本中是不需要的,因为我们得到了非破坏性的替换。使用它,s///r
* 返回 * 改变的字符串,而保持原始字符串不变。所以你可以这也更加干净和安全。现在
Perl::Critic
不应该标记这个。watbbzwu2#
问题是你正在
map
中修改$_
,这意味着你正在修改传递给map
的值。这可能会导致意外。切换到for
不会有帮助。在这种情况下,它实际上是无害的,因为
split
返回临时值,但以下是“干净”的替代方法:第一个