NÄCHSTE EVENTS

  • Deutscher Perl-Workshop 2016


30.01.2015

Modul des Monats: Januar 2015 - MetaCPAN::Client

Renée Bäcker

So, gerade noch geschafft. Hier kommt also das Modul des Monats Januar 2015: MetaCPAN::Client

Bevor wir zum Einsatz des Moduls kommen, noch ein paar Worte zu MetaCPAN. Wer Perl programmiert, hat mit sicherheit schon einmal etwas von CPAN gehört - eine riesige Sammlung an Perl-Modulen.

Diese Module unterstützt Perl-Programmierende und wer vor einem Perl-Problem steht, findet auf CPAN wahrscheinlich die Lösung - oder zumindest einen Teil davon. Sei es von Bildmanipulation, über Webentwicklung bis hin zu kompletten Anwendungen. Hier haben viele Perl-Programmierer und -Programmiererinnen ihre Arbeit zur Verfügung gestellt, damit es andere Programmierer einfacher haben.

Die CPAN-Suche ist nicht die allerbeste und vor ein paar Jahren haben sich ein paar Perl-Enthusiasten hingesetzt und eine elegantere Lösung entwickelt - MetaCPAN. Über die Jahre kamen neue Features - wie die "Favourites", die Einbindung von Github-Links oder auch von unserem Dienst PerlyBook - hinzu.

Hinter MetaCPAN steht ein Elasticsearch-Cluster. Und was liegt da näher als die Elasticsearch-Ergebnisse über eine API anzubinden? Genau - nichts. Also gibt es eine API, über die jeder die Inhalte von MetaCPAN abfragen kann.

Und genau dabei soll MetaCPAN::Client helfen - den Zugriff auf die API zu vereinfachen. Wir hatten es ja gerade schon von PerlyBook. Dort wird für die aktuellen Perl-Module die Dokumentation als E-Book bereitgestellt. Doch wie kommt man an die aktuellen Versionen der Perl-Module? Genau, über die API. Auch für unsere Mojolicious-Plugin-Matrix benutzen wir MetaCPAN::Client an verschiedenen Stellen.

Schauen wir uns mal drei Beispiele an:

Hier werden zuerst alle Distributionen geholt, deren Name mit MojoX oder Mojolicious anfangen. Hat man die Namen der Distributionen kann man mit MetaCPAN::Client alle möglichen Informationen holen, die man zu einer Distribution bekommen kann: Download-URL, Autor und Version. Damit kann man dann in einem weiteren Schritt diese Distribution installieren und so feststellen, ob z.B. bei einem Versionswechsel von Mojolicious irgendwelche Probleme auftreten.

In diesem Beispiel sind zwei Aufrufe von release zu finden. Zum Einen einen relativ komplexen Aufruf. Hier ist gefordert, dass der Treffer auf MetaCPAN genau die beiden Bedingungen distribution und version erfüllen muss. So kann man genau eingrenzen welche Treffer man haben möchte. Welche Felder man hier für die Bedingungen nehmen kann, muss man in der API nachschauen.

Zum anderen gibt es noch ein einfaches release($name). Hier bekommt man alle Releases für mit dem gegebenen Namen.

Bespiel 2: Herausfinden aller Abhängigkeiten.

Ausgangslage für dieses Beispiel ist, dass bei einem Kunden Probleme dahingehend auftraten, dass der Hoster nicht alle Perl-Module installiert hatte. Bei manchen Distributionen werden der Perl-Interpreter und einige Perl-Core-Module getrennt. Um das Projekt zum laufen zu bringen, hat der Kunde von uns eine Liste aller Abhängigkeiten und derer Abhängigkeiten verlangt. Die direkten Abhängigkeiten der Anwendung waren leicht in Listenform zu bekommen. Aber die Abhängigkeiten der Abhängigkeiten und deren Abhängigkeiten? Hier war MetaCPAN::Client wieder eine Hilfe.

Fragt man die MetaCPAN-API nach einem Release, bekommt man alle möglichen Informationen wie oben gezeigt. Man bekommt aber auch alle Abhängigkeiten. Uns so kann man durch alle Module durchgehen und sich eine Liste aller Abhängigkeiten generieren.

Der Weg ist hier, dass man erst nur den Modulnamen hat, der in der Anwendung mit use eingebunden wird. Mit der Methode module bekommen wir dann alle möglichen Informationen zu dem Modul. Unter anderem, zu welcher Distribution das Modul gehört. Über die Distribution kommt man dank release widerum an die Information mit den Abhängigkeiten.

Beispiel 3: Welche Module hängen denn von einem anderen Modul ab.

Hier also der umgekehrte Fall von Beispiel 2. Besonders für Modulautoren interessant. Vor größeren Änderungen am Modul kann man sich von der MetaCPAN-API alle Module liefern lassen, die vom eigenen Modul abhängig sind. Oder man kann alle Module finden, die eine Abhängigkeit auf Mojolicious haben.

Links

Hier noch ein paar Links: