Michael Schröpl: Und noch ein Problem: Verzeichnisse von der Suche ausschließen

Beitrag lesen

Hi sunny,

Durchsuchbare Inhalte/ Dateien

@files = ('*.shtml','*.htm',
'*/*.shtml','*/*.htm',
'*/*/*.shtml','*/*/*.htm');

enthält Deine Aufgabenstellung eine solche strikte Limitierung auf drei Ebenen, statt eine komplette
rekursive Verarbeitung eines kompletten Baums?

Falls nicht, wäre Dein Problem wahrscheinlich
übersichtlicher zu lösen (Lesetip: File::Find).

foreach $file (@files)
{
  $file_ok = 1;
  foreach $temp ($files_nicht)
{
  if ($temp eq $temp_file || $temp eq $file)

Was soll $temp_file sein?
Wo bekommt diese Variable überhaupt einen Wert her?

{
   $file_ok = 0;
  }
}

Genau diesen kompletten Block hättest Du bei
Verwendung eines Hashes durch eine einzige Abfrage
ersetzen können.

Ich verstehe allerdings nicht, was Du da tust.
$temp mag beispielsweise einen Dateinamen enthalten,
sagen wir mal 'site/bestaetigung.shtml'.
Aber der wird niemals _identisch_ zu einem Eintrag
aus @files sein! Mit 'eq' machst Du keinen Muster-
vergleich, sondern einen String-Vergleich.

if (-d $file && file_ok == 1)

Das wird also immer wahr sein - oder nie, je nachdem,
was in $temp_file drin steht.

Ich habe Deine Aufgabenstellung nicht verstanden -
aber ich kann mir nicht vorstellen, daß die Methode,
in @files eine statische Liste von Mustern zu halten
und diese dann umständlich weiter zu verarbeiten,
geschickter sein soll, als rekursiv den gesamten
Baum unterhalb von $basedir zu verarbeiten.

Viele Grüße
      Michael