I would suggest that we could get away with a single n-ary built-in. And I would strongly suggest that C<divvy> isn't the right name for it, since, apart from being a ugly, slang word, "divvy" implies dividing up equally. The built-in would actually be doing classification of the elements of the list, so it ought to be called C<classify>.
I would expect that C<classify> would return a list of array references. So Larry is (of course! ;-) entirely correct in pointing out that it would require the use of := (not =). As for an error when = is used, perhaps that ought to be handled by a general "Second and subsequent lvalue arrays will never be assigned to" error. The selector block/closure would, naturally, be called in C<int> context each time, so (again, as Larry pointed out) a boolean function would naturally classify into two arrays. Though it might at first be a little counterintuitive to have to write: (@false, @true) := classify { $^x > 10 } @nums; I think it's a small price to pay to avoid tiresome special cases. Especially since you then get your purge/vrep/antigrep for free: (@members) := classify {$_->{'quit'}} @members; ;-) Damian