in reply to Using File::Find to find drive (Win32)

Is that Windows? It can't work: "/" is the root of the current drive. What you should do, is pass a list of all the roots of all drives to find(). Looking up some Win32 API docs... I found this function:
use Win32::API; my $GetLogicalDriveStrings = new Win32::API(kernel32 => GetLogicalDriv +eStrings => ['N', 'P'], 'N'); my $drives = "\0" x 4000; my @drives; if($GetLogicalDriveStrings->Call(length $drives, $drives)) { @drives = split /\0+/, $drives; }
which produces a nice list of drive root directories, with a trailing backslash. Nice.

You might want to skip the floppies, though... 'A:' and 'B:'. There's an API call to recognize ejectable drives, but I'll skip that for now.

Now we have a list of roots to scan into, we still have to actually do it:

use File::Find; my %results; find sub { -f and push @{$results{$File::Find::dir}}, $_ if -e && /^pe +rl/ }, @drives; use Data::Dumper; print Dumper \%results;
The result of everything found is in a hash. The directory itself will be the hash key, the files found will be in the array that is the hash value.

update: warning: this takes ages for me to do its job. Don't use it on a regular basis. :)