#!/usr/bin/perl #------------------------------------------------------------------------------ # program     : r d w 0 1 _ c r i a n . p l #------------------------------------------------------------------------------ # author      : Christian Duehl # created     : 2004-07-08 # last change : 2004-07-08 # task        : Solution to RDW #1 # parameter   : none #------------------------------------------------------------------------------ use strict; use warnings; #------------------------------------------------------------------------------ # packages: #------------------------------------------------------------------------------ use Cwd          qw//; use Data::Dumper qw/Dumper/; #------------------------------------------------------------------------------ # prototypes: #------------------------------------------------------------------------------ sub rdir ($$); sub pdir ($); #------------------------------------------------------------------------------ # constants: #------------------------------------------------------------------------------ use constant SEP => '/'; #------------------------------------------------------------------------------ # main: #------------------------------------------------------------------------------ my %Dir; rdir(Cwd::cwd(), \%Dir); pdir(\%Dir); exit; sub rdir ($$) {    #--------------------------------------------------------------------------    # sub          : r d i r    #--------------------------------------------------------------------------    # author       : Christian Duehl    # task         : Reads the working directory into the data structure.    # parameters   : 1) starting directory    #                2) structure (hash) to store the result    # return value : the blessed new object    #--------------------------------------------------------------------------    # 0.0.1 - 2004-07-08 - CD - created    #--------------------------------------------------------------------------    my ($start, $dir) = @_;    my $read;    opendir($read, $start) or die "can't opendir '$start' : $!";    while (my $entry = readdir($read)) {        next if $entry eq '..' or $entry eq '.';        if (-d $start . SEP . $entry) {            my %tdir;            rdir($start . SEP . $entry, \%tdir);            $dir->{$entry} = { %tdir };        }        else {            $dir->{$entry} = '';        }    }    closedir($read) or warn "can't closedir '$start' : $!"; } # sub rdir sub pdir ($) {    #--------------------------------------------------------------------------    # sub          : p d i r    #--------------------------------------------------------------------------    # author       : Christian Duehl    # task         : Dump the given structure.    # parameters   : 1) reference to the structure    # return value : the blessed new object    #--------------------------------------------------------------------------    # 0.0.1 - 2004-07-08 - CD - created    #--------------------------------------------------------------------------    my ($dir) = @_;    $Data::Dumper::Indent    = 3;    $Data::Dumper::Varname   = 'dir';    $Data::Dumper::Quotekeys = 0;    $Data::Dumper::Sortkeys  = 1;        print Dumper($dir); } # sub pdir