In the perl version, perhaps `remove` would be a bit faster to just delete a hash slice.
sub remove { my ($b, $a) = @_; my %h = map { $_ => 1 } @$a; delete $h{@$b}; return [ keys %h ]; }