Kurzvorstellung und Bugfix
Ist es nicht lästig, Kommandozeilenparameter erst im Code und dann noch einmal im POD zu definieren? Getopt::Long und Pod::Usage sind zwar sehr praktisch, aber um die Dokumentation sowie Usage etc. konsistent zu halten, muss man immer an zwei Stellen ran: Code und Dokumentation.
Damian Conway auf der YAPC Europe 2007 in Wien – wenn er seine Module nur so gut warten würde wie er seine Vorträge hält!
Hier setzt das Modul Getopt::Euclid von Damian Conway an: Man definiert die Kommandozeilenschnittstelle einfach im POD und hat alles zusammen.
So weit so gut, aber nach der Nutzung von Getopt::Euclid bin ich endgültig der Ansicht: vor dem Einsatz eines Modules von Damian Conway sollte man sich dieses sowie die Bugreports dazu genau anschauen und ihm nicht blind vertrauen – insbesondere wenn er es in Perl Best Practices empfohlen hat. Dieses Buch ist zwar wirklich sehr empfehlenswert und Pflicht für jedes professionelle Entwicklerteam, Damians Module haben aber teilweise viele Bugs und werden eher schlecht gewartet.
Bug, Test und Fix
So hat auch Getopt::Euclid einige Bugs. Besonders fatal: die aktuelle Version ignoriert auf einem Unix-System das POD, wenn die Zeilenenden im Windows-Format vorliegen und umgekehrt (siehe auch den Bugreport). Das ist sehr ärgerlich.
Aber ein Bugfix bzw. Getopt::Euclid Patch (mit allen Dateien im Archiv) steht bereit ...
Um das Problem zu fixen habe ich mir das Modul angeschaut und war doch einigermaßen erstaunt: Anstatt auf einen Pod-Parser vom CPAN zurückzugreifen baut Damian Conway selbstgestrickte tief verschachtelte Reguläre Ausdrücke; anstatt das Parameterparsing einem erprobtem Modul zu überlassen strickt er es selbst. Das gleiche gilt für die Ausgabe der Hilfe. Damit verletzt er selbst die Regeln „Verwenden Sie wann immer möglich Core-Module“ sowie „Verwenden Sie CPAN-Module, wo es möglich ist“, die er in Perl Best Practices aufgestellt hat.
Daher habe ich – ausnahmsweise mal ganz vorbildlich – erst einen Test geschrieben, der das Problem simuliert und es dann gefixt: Der Einfachheit halber werden alle möglichen Zeilenumbrüche durch solche ersetzt, die auf dem aktuellen System üblich sind, also durch \n. (Download Patch und gepatchte Version)
HInweis: Da es kein offizieller Patch ist, habe ich die Versionsnummer nicht angepasst. Ich habe ja die Hoffnung, dass Damian ihn übernimmt.
Aktuelle Kommentare