我有以下数组:
$arry = [
'',
'foo',
'bar',
'ion'
];
我想要删除""
ion
和bar
。
但为什么失败呢?
my @new = grep {!/ |ed|ion/} @$arry;
打印:
$VAR1 = [
'',
'foo',
'bar'
];
答案 0 :(得分: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;
答案 1 :(得分:3)
试试这个:
my @new = grep {!/^$|ed|ion/} @$arry;
答案 2 :(得分:1)
如果您想保留edition
之类的字词,请使用:
my @new = grep {!/^$|\b(?:ed|ion)\b/} @$arry;