Sandra Schlichting Sandra Schlichting - 6 months ago 7
Perl Question

How to subtract an array from an array?

When I try the following

#!/usr/bin/perl

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
@bl
was subtracted from
@a
, so the output was
yellow purple pink
.

What's wrong here?

Answer

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;
Comments