First off, Use strict warnings and diagnostics. It'll make debugging a lot easier.
Secondly, try removing the finddir("$root$file"); from within the foreach loop. You're exiting the loop after the first iteration.
Update: Oops. Read that wrong. Hang on a sec.
Update 2:
my %config = ( home => '/home/cjf/' );
my %user = ( site_id => 'code' );
my @alldir = finddir("$config{home}$user{site_id}");
print $_, "\n" for @alldir;
sub finddir {
my $root = shift;
chomp $root;
$root = $root . '/' unless ( $root =~ m|/$| );
local *DIR;
opendir DIR, $root or die $!;
my @userfiles = sort grep !/^\.\.?\z/, readdir DIR;
my @direct;
foreach my $file (@userfiles) {
next unless ( -d "$root$file" );
my $dir = "$root$file";
$dir =~ s/^\Q$config{home}$user{site_id}\E//;
push(@direct, $dir);
}
return @direct;
}
That will return all directories in $config{home}$user{site_id} but not go into the sub directories. Is that what you're looking for?
|