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-curly.jpg](http://www.perl-blog.de/2008/05/15/damian-curly-thumb-512x246.jpg)
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.
Da das eines der Module ist, die Damian dieses Jahr schon mal angefasst hat, sind deine Chancen nicht allzu schlecht.
Bei Damian steht "TDD" für "talk driven development", nicht für "test driven development" wie für den Rest der Perlgemeinschaft.
Dafür, dass er ins POD seiner Module meistens "Bug reports and other feedback are most welcome" schreibt liegen erstaunlich viele Bugs länger als zwei Jahre in seiner Queue, einige auch gerne mal 5 Jahre.
Lade den Patch doch auf CPAN. Wie die Nomenklatur dafür aussieht, hat Andreas König auf dem letzten oder vorletzten Deutschen Perl-Workshop gezeigt. Damit ist der Patch wirklich für alle zugänglich...
Oder übernimm doch das Modul - wenn Damian damit einverstanden ist.
RenneeB: Das Modul übernehmen würde ich nicht allzu gern machen, da das doch ein komischer Klotz ist.
Aber den Patch aufs CPAN laden kann ich machen (und mir mal anschauen wie das ging) -- wenn Damian sich nicht rührt. ;-)
Moritz: Ja, das mit den vielen Bugs ist mir auch aufgefallen.
Mir ist da die Idee gekommen, dass man vielleicht mal die potentielle Qualität von Modulen daran messen könnte, wieviele Bugs (nicht) gefixt sind ... ;-)