sub first (&@) { my $code = shift; foreach (@_) { return $_ if &{$code}(); } undef; } #### # first defined value in @list $foo = first { defined($_) } @list;