in reply to How do I write subs that take bare blocks as args?
sub first (&@) { my $code = shift; foreach (@_) { return $_ if &{$code}(); } undef; } [download]
# first defined value in @list $foo = first { defined($_) } @list; [download]