use File::Find; sub wanted { return unless -d $_; push(@File::Find::matches, $File::Find::name); } sub find_it { local *File::Find::matches; find(@_); return @File::Find::matches; } { # Not a global. my @dirlist = find_it(\&wanted, shift(@ARGV)); # Use @dirlist here }