sub first (&@) { my $code = shift; foreach (@_) { return $_ if &{$code}(); } undef; # <====== BUG? } #### D:\workspace> perl D:\eclipse\workspace\BDC\lib> perl use strict; use warnings; use Data::Dumper; use List::Util; my @list = 1..20; my @first = List::Util::first { $_ == 21 } @list; print Dumper( \@first ); if( @first ) { print "In scalar-context: true\n"; } ^D $VAR1 = [ undef ]; In scalar-context: true #### D:\workspace>perl -MList::Util -le "print $List::Util::VERSION" 1.19