What the hell, here is my stab at this. It doesn't work when it comes across a unreadable object such as 'C:\System Volume Information', but that might be a issue in the Path::Class::Dir than my code.
#!perl
use strict;
use warnings;
use Path::Class; #file(), dir()
use Cwd; #getcwd()
my $start_dir = dir( $ARGV[0] || getcwd() );
#print "DEBUG: Scanning $start_dir\n";
$start_dir->recurse( callback => \&report_leaf_dirs );
sub report_leaf_dirs {
my $object = shift;
#print "DEBUG: processing $object\n";
return unless $object->is_dir();
# Test to see if we can read it
unless( $object->open() ) {
warn "Unable to open $object\n";
return;
}
# Test for sub directories
foreach my $child ( $object->children() ) {
return if $child->is_dir();
}
print "$object\n";
}