Sandra Schlichting Sandra Schlichting - 2 years ago 95
Perl Question

How to subtract an array from an array?

When I try the following


use strict;
use warnings;
use Data::Dumper;

my @bl = qw(red green blue);
my @a = qw(green yellow purple blue pink);

print Dumper [grep {not @bl} @a];

I get an empty array. I would have expected that
was subtracted from
, so the output was
yellow purple pink

What's wrong here?

Answer Source

You need to turn @bl into a hash to perform the set difference:

my %in_bl = map {$_ => 1} @bl;
my @diff  = grep {not $in_bl{$_}} @a;
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download