in reply to "not grep iterator" error

You can't. A prototype of \@ requires an actual array in that position, not merely something list-y. Quoth perlsub:

Any backslashed prototype character represents an actual argument that absolutely must start with that character. The value passed as part of @_ will be a reference to the actual argument given in the subroutine call, obtained by applying "\" to that argument.

Depending on your intent you might get away with (my @new_B = grep { ... } @B) instead (untested), but you'd be better off trying to get cheeky with prototypes and just pass references explicitly (which would mean you'd just need [grep { ... } @B]).

Update: Added a missing =

The cake is a lie.
The cake is a lie.
The cake is a lie.