While you should really use a module for this, I will answer the question: Your code is not recursive - it descends only one level, and a correct solution would allow for any number. Here is an example that does what you want. Note that symbolic links to directories are not followed.
my ($dir) = @_;
return unless -d $dir;
if (opendir my $dh, $dir)
# Capture entries first, so we don't descend with an
# open dir handle.
while ($file = readdir $dh)
push @list, $file;
for $file (@list)
# Unix file system considerations.
next if $file eq '.' || $file eq '..';
# Swap these two lines to follow symbolic links into
# directories. Handles circular links by entering an
# infinite loop.
push @files, "$dir/$file" if -f "$dir/$file";
push @files, list ("$dir/$file") if -d "$dir/$file";
print "file=", $_, "\n" for list ("D:");
pbeckingham - typist, perishable vertebrate.