timothy: Redundanzen aus einer Liste entfernen

Beitrag lesen

Hi folks

folgende Problemstellung:
Es existiert eine sortierte Liste @include mit Directory-Namen

n:/apache/
n:/apache/conf/
n:/apache/htdocs/
n:/downloads/
n:/eigene dateien/dokus/cgi/
n:/eigene dateien/dokus/cgi/cgi101/
n:/eigene dateien/exceldat/
n:/eindir/
n:/eindir/cvstest/cvs/root
n:/mercury/

(z.B. sollen diese Verzeichnisse inkl. Unterverzeichnissen gesichert werden).

Klar ist, dass in dieser Liste Redundanzen enthalten sind. Wenn ich "n:/apache/" sichere (inkl. aller Unterverzeichnisse), dann sichere ich logischer weise auch "n:/apache/htdocs/" usw. Wie kann man dies möglichst effektiv und elegant lösen, so daß @newinclude wie folgt aussieht.

n:/mercury/
n:/eindir/
n:/eigene dateien/exceldat/
n:/eigene dateien/dokus/cgi/
n:/downloads/
n:/apache/

Ich habe z.Zt. folgende wilde ;-) Konstruktion, die auch funktioniert:

<snippet>

#Redundanzen entfernen
my $pushen = 0;
for (my $i = scalar @include -1 ; $i > 0; $i--)
{
     if ($pushen)
     {
        push (@newinclude,$include[$i+1]);
        $pushen--;
     }
     $pushen++;
     for (my $y = $i-1; $y >= 0; $y--)
     {
        if ($include[$i] =~ /^$include[$y]/)
        {
           $pushen--;
           last;
        }
     }
}
push (@newinclude, $include[0]);

</snippet>

Vielleicht hat ja jemand Lust, sich da mal durch zuwühlen. Oder hat ein entsprechendes Muster zur Hand ;-)
Und bitte nicht sagen, die Redundanzen _dürfen_ in @include nicht sein. Angenommen, das zugehörige XML-File wurde von einem DAU per Hand erstellt.
Können wir uns darauf einigen?

Bye
Timothy