use File::Find; my %results; find sub { -f and push @{$results{$File::Find::dir}}, $_ if -e && /^perl/ }, @drives; use Data::Dumper; print Dumper \%results;