sub partition (&$@) { my $condition = shift; my $receivers_ar = shift; push @{ $receivers_ar->[ &$condition ] }, $_ for @_; @$receivers_ar } # Example 1: my( @good, @bad ); partition { /u/ ? 1 : 0 } [ \@good, \@bad ], qw( foo bar quux ); print "good=@good\n"; print "bad=@bad\n"; # Example 2: my @r = partition { $_ % 3 } [ [], [], [], ], 0 .. 12; for my $i ( 0 .. $#r ) { print "$i = @{$r[$i]}\n"; }