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; } } }