2 Stimmen

Perl Datei Globbing Eigenheiten

Ich schreibe ein Skript, das eine Reihe von Zahlen durchläuft, ein Globmuster erstellt und überprüft, ob eine Datei in einem Verzeichnis basierend auf dem Globmuster vorhanden ist.

Die Bilder sind Nascar-Autonummernbilder und folgen dem folgenden Muster:

1_EARNHARDTGANASSI_256.TGA
2_PENSKERACING_256.TGA

Hier ist ein Auszug aus dem Skript, das ich verwende:

foreach $currCarNum (0..101) {  
    if (glob("//headshot01/CARS/${currCarNum}_*_256.TGA")) {    
        print("Autobild $currCarNum existiert\n");
    } else {
        print("Autobild $currCarNum existiert nicht\n");
    }   
}

Das Problem, das ich habe, ist, dass Bilder, die im Verzeichnis existieren und dem Dateiglobmuster entsprechen sollten, dies nicht tun.

Zum Beispiel wird die Datei mit folgendem Namen als nicht vorhanden angezeigt:

2_PENSKERACING_256.TGA

Wohingegen die folgende als vorhanden angezeigt wird:

1_EARNHARDTGANASSI_256.TGA

Wenn ich das gleiche Dateiglobmuster in DOS oder Cygwin verwende, werden beide Dateien ordnungsgemäß aufgelistet.

Werden Dateiglobmuster in Perl anders interpretiert? Gibt es etwas, das mir entgeht?

2voto

Joel Punkte 3325

Sie müssen die Ergebnisse im Listenformat zurückgeben lassen, anstatt im Skalarformat. Versuchen Sie es mit dieser Anweisung für Ihr if-Statement, es hat bei mir funktioniert, als ich es getestet habe.

if (my @arr = glob("//headshot01/CARS/${currCarNum}_*_256.TGA")) {

1voto

Eugene Yarmash Punkte 130008

Von perldoc perlop:

Ein (Datei)glob bewertet sein (eingebettetes) Argument nur, wenn es eine neue Liste beginnt. Alle Werte müssen gelesen werden, bevor es wieder beginnt. Im Listenkontext ist dies nicht wichtig, da Sie sie sowieso automatisch alle erhalten. Im Skalarkontext gibt der Operator jedes Mal den nächsten Wert zurück, wenn er aufgerufen wird, oder undef, wenn die Liste erschöpft ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X