@array1 = qw/7 2 5 8 0 10/; @array2 = grep { foo($_) or foo_report($_) } @array1; print join " ","array2 contains:",@array2,$/; sub foo { ( $_[0] / 2 > 1 ) } sub foo_report { print "foo returned false for $_[0]\n"; # do lots of other stuff... 0; # make sure to return false, for grep's sake } __OUTPUT__ foo returned false for 2 foo returned false for 0 array2 contains: 7 5 8 10