Thread Version eines Moduls herausfinden (25 answers)
Opened by cbxk1xg at 2005-01-10 09:47

Dubu
 2005-01-11 14:47
#4045 #4045
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Ojeh, ist das mies. (Ja, ja, schon die Zeile "$line = $_;" sollte einen misstrauisch machen, ich geb's zu.)

Da versucht jemand, auf verschiedene Methoden den Modulnamen und die Modulversion herauszubekommen:
1.) Erst mal die Annahme, dass irgendeine Zeile, in der als erstes Wort "package" steht, dahinter den Namen des Packages enthaelt. Das mag ja in den meisten Faellen stimmen, sicher ist das aber nicht. Da nicht mal auf Tabs am Zeilenanfang geprueft wird, kann es umgekehrt sogar sein, dass der Packagename gar nicht gefunden wird.
Urteil: moeglich, aber fehleranfaellig.

2.) Dann wird gesucht nach Versions-Tags von RCS oder CVS, die vielleicht irgendwo stehen. Ziemlich hanebuechen, da diese Versionen dateiweise hochgezaehlt werden und meist ueberhaupt nichts mit der Versionsnummer des Releases zu tun haben.
Urteil: Originell, aber unsinnig.

3.) Als naechstes wird nach Zeilen gesucht, die entweder am Anfang (nach evtl. Whitespace) etwas wie "$VERSION = " oder "$paketname::VERSION =" stehen, oder - da wird es ganz gruselig, irgendwo in der Zeile so etwas wie "Revision: " mit einer Zahl und einem $ dahinter.
Urteil: waghalsig.

Das Ergebnis, was dieser Code als Paketversion ausgibt, kann man optimistisch hoechstens als "gut geraten" bezeichnen. Mit der tatsaechlichen Paketversion - sofern sie ueberhaupt im Paket steht - hat das jedenfalls nicht unbedingt etwas zu tun.

Ein gut geschriebenes Modul benutzt eine Variable $VERSION, die im Namensraum des Paketes definiert ist, s. perlmodstyle. Wie man nun auf halbwegs(!) vernuenftige Weise herausfindet, welche Version ein so geschriebenes Paket hat, ohne das Modul zu laden, kann man sich z.B. in der Routine parse_version() aus ExtUtils::MM_* anschauen. Das ist zwar immer noch nicht perfekt (wuerde z.B. faelschlicherweise auch ein $VERSION innerhalb eines Here-Dokumentes zaehlen), aber gibt sich schon grosse Muehe.\n\n

<!--EDIT|Dubu|1105447696-->

View full thread Version eines Moduls herausfinden