从包含Perl中的空或空白字符的数组中删除元素

时间:2014-12-30 16:11:31

标签: perl dictionary grep

我想使用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

请建议更好的方法,最好是一行。

2 个答案:

答案 0 :(得分:4)

在我看来,你只想要

@y = grep /\S/, @x;

答案 1 :(得分:3)

  1. 第一个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是最宽容的,最佳做法是至少应用此级别(或更低)

  2. 始终将use strict; use warnings;放在Perl程序的开头附近。

  3. $_放入grep中输出内容:grep {s/^\s+|\s+$//g; $_ }
  4. 最后:

    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