For anybody who comes after me, I'd like to point out in the first above example by dragonchild a minor correction. When I copied the example, I was losing the data pushed into @ArrayC.
Adding a pair of ( ) on the line with grep solves the problem.
my @ArrayC = map {
my $x = $_;
(grep { $x =~ /^$_/ } @ArrayB) ? () : $x
} @ArrayA;
I don't know if it's a typo or a change in how Perl handles the expression. I figure this note will help save someone fifteen minutes of frustration.
Originally posted as a Categorized Answer.