!/usr/bin/perl use strict; use warnings; use Data::Dumper; my @A = ( "ab", "abcd", "f" ); my %H = ( 'ab' => 0, 'abcd' => 1, #'def' => 2, ); my $re_inner = join( '|', @A); my $re_outer = join '|', grep /$re_inner/gi, keys %H; my @B = grep ( !/$re_outer/gi, @A ); print Dumper(\@B);