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