我想使用map或grep将数组@x转换为数组@y。
@x = ('aa','', 'bb',' ','cc', "\t");
@y = ('aa','bb','cc');
我尝试了什么:
#@x= grep {s/^\s+|\s+$//g} @x; # not correct
@y = grep { $_ } @x; # remove '' null character
请建议更好的方法,最好是一行。
答案 0 :(得分:4)
在我看来,你只想要
@y = grep /\S/, @x;
答案 1 :(得分:3)
第一个grep
就足够了,但在grep
中进行替换似乎很奇怪,最好使用map
。请将grep
视为过滤器
在grep
中查看关于替代的perlcritic'''':
$ perlcritic -5 test.pl
test.pl: Don't modify $_ in list functions at line 6, column 6. See page 114 of PBP. (Severity: 5, Policy: ControlStructures::ProhibitMutatingListFunctions)
5
是最宽容的,最佳做法是至少应用此级别(或更低)
始终将use strict; use warnings;
放在Perl程序的开头附近。
$_
放入grep中输出内容:grep {s/^\s+|\s+$//g; $_ }
最后:
use strict; use warnings;
my @x = ('aa','', 'bb',' ','cc', '\t');
my @y = ('aa','bb','cc');
@x = grep {s/^\s+|\s+$//g; $_ } @x;
print join "\n", @x;
但grep
可以简单地写成
grep { /\S/ } @x
aa
bb
cc
\t