use strict; use warnings; my $INDENT=' 'x2; my @aSorted=sort qw(/var/www/data/stuff /var/www /var/www/data/misc /var/logs /var/logs/data); my $aLast=[]; foreach my $sPath (@aSorted) { chomp $sPath; my @aName = split(m{/}, $sPath); for my $i (0..$#aName) { if (($#$aLast<$i) || ($aLast->[$i] ne $aName[$i])) { if ($i>1) { print '', $INDENT x ($i-1), '->'; } print $aName[$i], "\n"; } } $aLast=\@aName; } #### var ->logs ->data ->www ->data ->misc ->stuff #### use strict; use warnings; my $INDENT=' 'x2; my @aUnsorted= qw(/var/www/data/stuff /var/www /var/www/data/misc /var/logs /var/logs/data); my %hVisited; foreach my $sPath (@aUnsorted) { chomp $sPath; my @aName = split(m{/}, $sPath); for my $i (0..$#aName) { my $k=join('/',@aName[0..$i]); unless ($hVisited{$k}) { if ($i>1) { print '', $INDENT x ($i-1), '->'; }; print $aName[$i], "\n"; $hVisited{$k}=1; } } } #### var ->www ->data ->stuff ->misc ->logs ->data