I had so much fun doing that that I did one that did a little more :

Try this it's a little creamier since it uses <UL> tags instead of &#149;
And it lists files in the directories that are in the directory in $dir ::

I better stop now or I'll be messing with this all night!

!#/usr/bin/perl

use warnings;
use strict;
use CGI qw/:standard/;
use File::Slurp;

my $dir = '.'; # hardcoded, from input $dir = param('dir'), from function like cwd(), 
etc...

print header();

my @files = read_dir($dir);

print "<P> <UL> \n";

foreach my $f(@files) { 

        if(-d "$dir/$f") {
                print "<LI> <a href=\"$f\"> $f </a> \n"; 
                print "<UL>\n";
                my @tmp = read_dir("$dir/$f");

                foreach my $s(@tmp) {
                        print "<LI> <a href=\"$f/$s\"> $f/$s </a>\n";
                }

                print "</UL>\n";
        } else {
                print "<LI> <a href=\"$f\"> $f </a>\n";
        }
}

print "</UL> <P>\n";


> Thanks for your help! You saved me a lot of mis-programming. 
> Yea, I'm really interested in the new challenges -- I just 
> wish I already knew perl. It can do so much.
> 
> --Deb
> 
> -----Original Message-----
> From: Dan Muey [mailto:[EMAIL PROTECTED]
> Sent: Wednesday, March 05, 2003 3:02 PM
> To: Scott, Deborah; [EMAIL PROTECTED]
> Subject: RE: How to look into every subdirectory
> 
> 
> > I need to make an HTML page that lists all files and
> > directories and then links to them. The following script, 
> > with a subroutine,  looks like what I need. I should just 
> > need to add some html tags to the Print statements.
> > 
> > Does that sound right to you all? Or do you have better
> > suggestions? (I'm a real beginner at Perl, but my job has 
> > suddenly starting requiring lots of perl scripts!)
> Sounds like a cool job!
> 
> Here's what I'd do to get a list of links to all the 
> files and directories and make an html page out of it ::
> 
> #!/usr/bin/perl
> 
> use strict;
> use warnings;
> use CGI qw/:standard/;
> use File::Slurp;
> 
> my $dir = '.'; # hardcoded, from input, from function like 
> cwd(), etc...
> 
> print header();
> 
> my @files = read_dir($dir);
> 
> foreach my $f(@files) { print "\&\#149\; <a href=\"$f\"> $f 
> </a> <br> \n"; }
> 
> 
> Then from there you can get fancy like checking for the file type and
> displaying different icons for each one,
> Having alist of files/types to not display links to, taking 
> directories and
> making a list of files with links in each of them also, and on and on.
> You could also add a header and footer tyo make it look ike 
> the rest of your
> site
> 
> Perl is awesome!!
> 
> Learn how to use modules, it's tricky at first but you'll 
> save yourself lots
> of time.
> 
> DMuey
> 
> > 
> > --Deborah
> > (I asked this question a while back, but my email messages 
> > got messed up and I can't find the answer that I got.)
> > 
> > -----Original Message-----
> > From: Beau E. Cox [mailto:[EMAIL PROTECTED]
> > Sent: Tuesday, February 25, 2003 12:29 PM
> > To: Prasad Karpur; [EMAIL PROTECTED]
> > Subject: RE: How to look into every subdirectory
> > 
> > 
> > Hi -
> > 
> > > -----Original Message-----
> > > From: Prasad Karpur [mailto:[EMAIL PROTECTED]
> > > Sent: Tuesday, February 25, 2003 3:18 AM
> > > To: [EMAIL PROTECTED]
> > > Subject: How to look into every subdirectory
> > > 
> > > 
> > > I am new to Perl and would like to know how to look into every
> > > subdirectory. Any help would be greatly appreciated.
> > > 
> > > #!/usr/bin/perl
> > > 
> > > #use strict;
> > > use Cwd;
> > > 
> > > my $curr = cwd();
> > > opendir(CURRDIR, $curr) or die "can't open directory ($!), 
> > > exiting.\n";
> > > 
> > > my @files = readdir(CURRDIR);
> > > #closedir(CURRDIR);
> > > 
> > > foreach my $file (sort @files) {
> > > 
> > >   next if $file eq '.' || $file eq '..';
> > >   next if !-d $file;
> > >  
> > >  if (-d $file) {
> > >       print "$file/\n"; #Puts a slash in front of every directory
> > > it encounters
> > > }
> > > else { print "$file\n"; }
> > > 
> > > }
> > > 
> > > 
> > > closedir(CURDIR);
> > > 
> > 
> > Just use a recursive subroutine to traverse your directory 
> > tree from any starting point:
> > 
> > traverse (cwd());
> > 
> > sub traverse
> > {
> >     my $dir = shift;
> >     $dir .= '/' unless $dir =~ m{/$};
> >     opendir (DIR, $dir) ||
> >             die "unable to open directory $dir: $!\n";
> >     my @contents = readdir (DIR);
> >     closedir (DIR);
> > 
> >     for my $item (sort @contents) {
> >             my $di = "$dir$item";
> >             next unless (-d $di);
> >             next if ($item eq '.' or $item eq '..');
> >             print "dir: $di\n";
> >             traverse ($di);
> >             }
> > 
> >     for my $item (sort @contents) {
> >             my $di = "$dir$item";
> >             next if (-d $di);
> >             print "file: $di\n";
> >             }
> > }
> > 
> > Try the above; WARNING: may contain typos! :)
> > 
> > Also - check out File::Find on CPAN.
> > 
> > Aloha => Beau;
> > 
> > 
> > -- 
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> > 
> > -- 
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> > 
> > 
> 

--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to