##
my @extracted;
my $c = 0;
while ($c < @$list) {
local *_ = \$list->[$c];
if (do { ... }) {
push @extracted, splice @$list, $c, 1;
}
else {
$c++;
}
}
####
my @extracted = grep { ... } @list;
@list = grep { not ... } @list;
####
my $filter = sub { ... };
my @extracted = grep { $filter->() } @list;
@list = grep { not $filter->() } @list;