Здесь part
из List :: MoreUtils пригодится.
use List::MoreUtils qw'part';
my($even,$odd) = part { $_ % 2 } @array;
Это прекрасно работает, если вы хотите, чтобы каждый элемент ввода былровно один массив выходных данных.
Если вы хотите поместить их в более чем один из массивов, вы должны сами их зациклить.
Лучший способ сделать это сцикл foreach
.
my(@div2,@div3);
for my $elem (@array){
push @div2, $elem unless $elem % 2;
push @div3, $elem unless $elem % 3;
}
Если вам нужно выполнить много подобных проверок, возможно, вам следует проверить, что вы проверяете.
my %div;
for my $elem (@array){
for my $div (2,3,5,7,11,13){
push @{ $out{$div} }, $elem unless $elem % $div;
}
}