sub first (&@) { my $code = shift; foreach (@_) { return $_ if &{$code}(); } undef; } #### open my $fh, '<', $filename or die "Cannot open '$filename' for reading: $!\n"; tie my @arr, 'Tie::Array::Lazy', [], sub { scalar <$fh> }; first { } @arr;