but what about printing out when it returns false, or a
larger set of things I need to do upon a false return?
Well if it's just a matter of printing a message when foo()
returns false, you could just add a print inside
sub foo { ... } -- but if it's really "a larger set of
things" that are needed on a false return, it might be
too much to cram into sub foo { ... } (or maybe
you don't have the privelege to muck with what "foo()" does).
In which case, you could try defining a second sub, let's
call it "foo_report()", have it do whatever is needed when
foo() returns false, and make sure that foo_report() also
returns false -- and include it in the grep condition:
@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
|