my @a_columns = map { s/^"|"$|\n|\r|\n\r|"//g; $_ } split /;/, $s_act_line;
上面提到的是我的代碼。由于使用了地圖功能,我在合并此代碼時收到自動警告。請幫助我使用 for 或 foreach 或任何回圈來轉換它。
我已經嘗試了幾種方法,但對我沒有任何作用。
請幫幫我

uj5u.com熱心網友回復:
該警告似乎跟在Perl::Critic之后(即使它似乎是由您的 IDE 發出的)。
變數$_in map,而且 ingrep和foreach,是當前處理的陣列元素的別名。所以一旦它被改變,輸入陣列就會改變!這通常是不需要的,并且通常可以肯定地被認為是一種棘手的做法,因此是警告。
但在這種情況下,輸入map是由 , 生成的串列split,用于您的變數。因此map' 塊中的代碼不能通過更改$_. 然后可以安全地告訴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' 塊中使用的習語對于 5.14 的 Perl 版本是不需要的,因為我們得到了非破壞性替換。使用它s///r 回傳更改后的字串,而原始字串保持不變。所以你可以做
my @a_columns = map { s/^"|"$|\n|\r|\n\r|"//gr } split /;/, $s_act_line;
這也更清潔。現在Perl::Critic不應該標記這個。
uj5u.com熱心網友回復:
問題是您正在修改$_,map這意味著您正在修改傳遞給map. 這可能會帶來驚喜。切換到for沒有幫助。
在這種情況下它實際上是無害的,因為它split回傳臨時值,但以下是“干凈”的替代方案:
my @a_columns =
map { ( my $tmp = $_ ) =~ s/^"|"$|\n|\r|\n\r|"//g; $tmp }
split /;/, $s_act_line;
use List::MoreUtils qw( apply );
my @a_columns =
apply { s/^"|"$|\n|\r|\n\r|"//g; }
split /;/, $s_act_line;
my @a_columns =
map { s/^"|"$|\n|\r|\n\r|"//rg }
split /;/, $s_act_line;
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/410306.html
標籤:
上一篇:如何修剪絕對目錄路徑?
