Thread mehrere Bedingungen um bestimmte Dateien zu löschen
(3 answers)
Opened by zenkko at 2009-03-25 14:57
Hallo zenkko,
zu Deinem Programm habe ich mehrere Anmerkungen: 1. Wie meine Vorredner bevorzuge ich am Programmanfang nicht nur ein "use strict;", sondern zusätzlich ein "use warnings;". Diese Anweisung erzeugt eine Menge nützlicher Warnungen. Das fertige Programm sollte keine "warnings" mehr produzieren. 2. Im Programm von bieber findest Du etwas sehr, sehr Nützliches: Kommentare. Anhand der Syntax lässt sich leider oft nicht erkennen, was der Autor wirklich im Sinn hatte. Womit ich auch gleich zu Punkt 3. komme: Code: (dl
)
unless ( $inhalt = @beide or $bild ) Was hattest Du hier im Sinn? Laut Deiner Beschreibung soll "WDS" gelöscht werden, wenn sich keine ".jpg" Datei im selben Ordner befindet. Vermutlich ist dies die Stelle, an der Du diese Bedingung prüfen wolltest, da ja im Anschluß evtl. gelöscht wird. Hierzu gibt es mehrere Anmerkungen: 3a.: Die erste Tabelle, die ich mir beim Erlernen einer neuen Programmiersprache an den Bildschirm hänge (nur symbolisch gemeint), ist die Tabelle "Operator Precedence", d.h. der Vorrang bzw. die Reihenfolge, in der Operatoren verarbeitet werden. Die Zeile Code: (dl
)
$inhalt = @beide or $bild kann man auch so schreiben: Code: (dl
)
($inhalt = @beide) or $bild was Du vermutlich nicht beabsichtigt hast, aber der Zuweisungsoperator (genau, das wäre Anmerkung 3b: hier sollte wohl eigentlich ein Vergleichsoperator stehen) hat Vorrang vor dem "or" Operator. Der Ausdruck ($inhalt = @beide) wird in Deinem Programm immer "wahr" sein, d.h. Du wirst immer in die "unlink" Anweisung laufen. 3c.: Ach ja, der Vergleichsoperator für Strings ist "eq" und nicht "==", aber wenn Du nachschauen willst, ob sich bestimmte Muster in einem String befinden, kannst Du das nicht mit dem Vergleichsoperator machen. Schau Dir dazu mal den Operator "=~" bzw. reguläre Ausdrücke an, evtl. auch die Funktion "grep". 4. Wieso opendir()? Das ist unnötig, wenn Du Dir die Dateiliste mit "ls -1" holst. 5. unlink() findet "WDS" nur, wenn Du den Pfad zu WDS mit angibst, bzw. das Skript entsprechend das Arbeitsverzeichnis wechselt. So wie das dasteht, versucht unlink() eine Datei "WDS" im aktuellen Arbeitsverzeichnis zu löschen. Die Programme die hier vorgeschlagen werden, habe ich mir nicht genau angesehen. |