Für einen speziellen Kundenauftrag begab ich mich kürzlich in die Tiefen und/oder Untiefen der Scriptsprache Perl.
Es galt ein Script, das einen multiplen Fileupload entgegenahm und gleichzeitig eine Upload Fertigstellungsfortschrittanzeige (Gerne auch Progressbar genannt) bot, etwas zu verbessern.
Wurden nämlich sehr große Dateien hochgeladen, so dauerte das letzte Prozent mitunter mehrere Minuten. Und auch wenn man dieses Verhalten von zahlreichen Desktopinstallationen kennt, für diese Anwendung war das nicht hinnehmbar.
Wie sich nach einer eingehenden Analyse herausstellte war das Programm deshalb etwas unrund, weil es zuerst den gesammten Stream in eine Temp-Datei geschrieben hat und diese dann nochmals geparst und gesplittet hat. Dieses Splitten hat ziemlich viel Arbeitsspeicher benötigt und einiges an Prozessorlast verursacht.
Das Problem an sich war relativ einfach zu lösen, es musste nur der Splitprozess etwas umgeschrieben werden.
Das weitaus größere Problem waren die syntaktischen Eigenheiten von Perl und die Tatsache, dass sämtliche Fehlermeldungen komplett unterdrückt wurden. Und natürlich die Tatsache, dass Perl für mich vollkommenes Neuland war. Auch über 10 Jahre Erfahrung mit Java und PHP helfen da nur begrenzt weiter ![]()
Und ohne diese unterdrückten Fehlermeldung ist es ziemlich schwer rauszufinden was an :
if() {
} elseif () {
}
else {
}
falsch sein soll. (Für alle die es wissen wollen: else if schreibt man in Perl elsif, also ohne das mittlere “e“!)
Nachdem ich also anfangs viel Zeit mit solchen Kleinigkeiten verbracht hatte, habe ich dann allerdings irgendwann auch die kryptischen Syntaxvariationen von Perl verstanden und ein Logging für die Fehlermeldungen installiert. Seeehr hilfreich
Von da an ging es dann schnell, das Problem war erkannt, die Lösung im Kopf vorhanden und entsprechend rasch umgesetzt.
Hier konnte ich mich dann auch über Perls spezielle Variablen, Kurzformen etc. freuen, bei deren Anblick mir am Anfang des Projekts noch Schweißperlen auf der Stirn standen. . .
Jetzt, nach der Verbesserung also, dauert es bei 1,2 GB Datenvolumen ca. 10 Sekunden diese zu splitten: Hervorragend!
Und auch wenn ich Anfangs gewisse Probleme mit Perl hatte: es macht schon Spass mit einer derart effizienten Sprache zu arbeiten. Aber um der vollen Wahrheit die Ehre zu geben: In keiner anderen Sprache kann man mit so wenigen Zeichen so viel falsch machen. Man schafft es auch selten einfach mal was lesbar zu gestalten. Die sogenannten speziellen Variablen haben diesen Namen absolut verdient. $/ oder $_ würden wohl nur wenige als Variablen erkennen.
Bevor ich nun aber beginne über Perl zu lästern, beende ich diesen Artikel lieber. Das Projekt wurde erfolgreich beendet und ich bin ein bisschen schlauer geworden, was Perl betrifft.
In diesem Sinne,
Alexander