in reply to
Recursive Directory Listings
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.
#! /usr/bin/perl
use strict;
use warnings;
sub list
{
my ($dir) = @_;
return unless -d $dir;
my @files;
if (opendir my $dh, $dir)
{
# Capture entries first, so we don't descend with an
# open dir handle.
my @list;
my $file;
while ($file = readdir $dh)
{
push @list, $file;
}
closedir $dh;
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";
}
}
return @files;
}
print "file=", $_, "\n" for list ("D:");
exit 0;
pbeckingham - typist, perishable vertebrate.