1

我有以下数组:

$arry = [
      '',
      'foo',
      'bar',
      'ion'
    ];

我想要做的是删除"" ionbar. 但是为什么这失败了?

my @new = grep {!/ |ed|ion/} @$arry;

它打印:

$VAR1 = [
          '',
          'foo',
          'bar'
        ];

在这里测试:https ://eval.in/50792

4

3 回答 3

4

grep留下元素'','foo''bar'。这是因为它正在删除包含单个空格'ed'、 或的元素'ion'。数组中只有一个元素符合此标准:最后一个元素,即'ion'. 所以只删除了这个。

也许你想要

my @new = grep { $_ ne '' and $_ ne 'ion' and $_ ne 'bar' } @$arry;

或者

my @new = grep $_ !~ /\A(?:|ion|bar)\z/, @$arry;
于 2013-09-26T11:18:58.237 回答
3

尝试这个:

my @new = grep {!/^$|ed|ion/} @$arry;
于 2013-09-26T09:37:23.197 回答
1

如果你想保留这样的词edition,请使用:

my @new = grep {!/^$|\b(?:ed|ion)\b/} @$arry;
于 2013-09-26T09:46:15.263 回答