Perl:从多个数组中删除元素

时间:2014-07-21 04:00:51

标签: perl

我试图从数组中删除值我尝试了以下所有3种方法,但前后的dumper输出保持不变。

@array:

$VAR1 = [
          [
            'LINK-IF-A/1/1/1<->IF-B/1/1/1',
            'LINK-IF-C/1/1/1<->IF-D/1/1/1',
            'LINK-IF-E/1<->IF-F/2'
          ]
        ];

$ value = LINK-IF-C / 1/1/1&lt; - &gt; IF-D / 1/1/1

Method1 :

my @remove = grep { $_ != "$value" } @array;

Method2 :

my @remove = grep { grep {!/$value/ } @$_ } @array;

Method3 :

my @remove = grep(!/"$value"/, @array);

DEBUG(自卸车\ @Remove)); - &GT;与输入相同的输出...无删除

谢谢,

2 个答案:

答案 0 :(得分:1)

for my $inner (@array) {
   @$inner = grep { $_ eq $value } @$inner;
}

抱歉,没有时间解释。

答案 1 :(得分:0)

Codepad

一种方法是遍历数组并grep每个内部数组:

my @remove = map { [ grep { !/$value/ } @$_ ] } @array;

如果外部数组实际上只是一个元素的数组,则可以避免使用map并将数组从堆栈中弹出:

my @remove =  [ grep { !/$value/ } @{$array[0]} ];