use strict; use warnings; use File::Next; my $find_this = sub { my ($starting_points, $target) = @_; my $ref_sub = File::Next::files( "$starting_points" ); while ( my @files = $ref_sub->() ) { return @files if $files[1] =~ $target; } }; my @files = &$find_this( "/tmp/dir1", "file3.txt" ); print "@files\n";