my @all = ('a', 'b', 'c', '1', '2', '3'); my ($numbers, $letters) = grep2 {/\d/} @all; print "numbers: @$numbers\n"; # prints "1 2 3" print "letters: @$letters\n"; # prints "a b c" #### sub grep2 (&@) { my $code = shift; my $true = []; my $false = []; foreach (@_) { if (&{$code}()) { push @$true, $_; } else { push @$false, $_; } } return ($true, $false); } my @all = ('a', 'b', 'c', '1', '2', '3'); my ($numbers, $letters) = grep2 {/\d/} @all; print "numbers: @$numbers\n"; # prints "1 2 3" print "letters: @$letters\n"; # prints "a b c" print "all: @all\n";