Was hat sich in den letzten Jahren in dem Ökösystem von Perl 5 getan? In dieser Präsentation stelle ich einige Themen vor.
Diese Präsention habe ich anlässlich der Wiederbelebung von Hamburg.pm am 5. September 2017 gehalten.
2. Was soll dieser Titel?
• Paul Fenwick hat einen Vortrag gehalten, der »Perl
Renaissance« hieß: https://www.youtube.com/watch?
v=oZ5xTI1QRTA
• Seine Themen greife ich lose auf – was ist in den letzten
Jahren alles entstanden?
• Zum Schluß schweife ich deutlich ab :-)
• Viele Links nach draußen und Live-Demos …
3. Paul Fenwick, »The Future is Awesome«, https://www.youtube.com/watch?v=c7TwbTtofLo
5. CPAN
• »comprehensive Perl archive network«
• zentrale Sammelstelle für Perl-Erweiterungen
• »Das Killer-Feature« oder »die Seele« von Perl
• mit Perl 5 entstanden (vorher gab es keine Module)
7. MetaCPAN
• ursprünglich als API zum CPAN gedacht
• mittlerweile viel beliebter als search.cpan.org
• mächtiger und moderneres Layout
• wird stetig weiterentwickelt
• Demo: https://metacpan.org/pod/distribution/App-
cpanminus/lib/App/cpanminus/fatscript.pm
8. CPAN Testers Matrix
• die »CPAN Testers« sind Freiwillige, die das CPAN testen
• Resultate nach Betriebssystem und Perl-Version
• Prüfung auf Lauffähigkeit vor Installation
• demo: http://matrix.cpantesters.org/
9. cpanm
• früher konnte man nur über die CPAN-Shell Module
installieren
• beim ersten Aufruf unfassbar viele Konfigurationsoptionen
• viel zu viel Ausgaben während der Installation
• Installation ohne Root-Rechte knifflig
10. cpanm (2)
• Ausführbar ohne Konfiguration
• gibt während der Installation nur wesentliche Infos aus
• die ausführlichen Informationen stehen im Log
• Installationsziel wählbar
• Demo
11. cpanm-reporter
• die CPAN-Testers-Matrix wird von allen befüllt
• https://metacpan.org/pod/App::cpanminus::reporter
• Ergebnis der Installation durch cpanm wird gesendet
• die anstehenden Ergebnisse kann man sich ansehen:
Demo http://metabase.cpantesters.org/tail/log.txt
12. Stratopan
• Webdienst, basiert auf pinto
• Sammelt Module mit bestimmten Versionen in einem
Repo
• mit cpanm kann man von diesem Repo installieren
• damit werden reproduzierbar die gleichen Module
installiert
• Schnellstart: http://perltricks.com/article/48/2013/11/15/
A-Stratopan-quick-start-user-guide/
15. Mojolicious
• modernes Framework vom Autor von Catalyst
• hat keine Abhängigkeiten bis auf Kern-Module
• aktive Community, stetige Weiterentwicklung
• massig Plugins
• ausgiebige Doku, Screencasts, Howtos
• Einstiegsseite: http://mojolicious.org/
17. Moose
• Perl5 hat sehr schmale Objektorientierung
• Perl6 hat OO aus allen Sprachen gesammelt
• Moose ist die Portierung des OO-Systems von Perl6 nach
Perl5
• Syntax ist immer noch Perl5, nur Semantik wird verändert
20. perltidy
• formatiert Perl-Quelltext gemäß Konfiguration
• funktioniert zufällig ganz gut :-)
• es gibt Pakete für alle gängigen Editoren
• Test::PerlTidy testet, ob der Code aufgeräumt ist
• https://metacpan.org/pod/distribution/Perl-Tidy/bin/
perltidy
21. perlcritic
• TIMTOWTDI, aber einige Arten sind besser als andere
• perlcritic prüft Quelltext auf Einhaltung von Richtlinien
• perlcritic hilft Teams, Codiernormen durchzusetzen
• Richtlinien werden programmiert und sind normale
Module
• Demo: http://perlcritic.com/
22. perlbrew
• traditionell kommt Windows ohne Perl und Unix mit einer
veralteten Version
• ein oder mehrere neuere Perl zu installieren war früher nur
händisch möglich
• mit perlbrew kann man mehrere Perl-Installationen
gleichzeitig auf einem System verwalten
• Homepage mit Ninja: https://perlbrew.pl/
23. carton
• ähnlich wie pinto/Stratopan (bzw. bundler in ruby)
• verwaltet Modulabhängigkeiten für eine Anwendung
• kann diese installieren und die Anwendung dann starten
• Doku: https://metacpan.org/pod/distribution/Carton/
script/carton
• neue Spezifikation von Abhängigkeiten: cpanfile
24. requires 'Plack', '1.0'; # 1.0 or newer
requires 'JSON', '>= 2.00, < 2.80';
recommends 'JSON::XS', '2.0';
conflicts 'JSON', '< 1.0';
on 'test' => sub {
requires 'Test::More', '>= 0.96, < 2.0';
recommends 'Test::TCP', '1.12';
};
on 'develop' => sub {
recommends 'Devel::NYTProf';
};
feature 'sqlite', 'SQLite support' => sub {
recommends 'DBD::SQLite';
};
26. Dist::Zilla
• »maximum overkill for CPAN authors«
• um ein Modul auf CPAN hochzuladen, muss man viele
Dateien anlegen
• »eigentlich will ich doch nur dieses Modul hochladen«
• die notwendigen Dateien kann Dist::Zilla anlegen (und
noch viel mehr)
• Demo: autotest
28. Test::More
• Standard-Testmodul
• bietet einfache Funktionen, um erwartetes mit
tatsächliche berechnetem Ergebnis zu vergleichen
• ok, is, like, …
• kann auch Datenstruktur (einfach) testen
• verführt zum Schreiben von Spaghetti-Testcode
• Doku: https://metacpan.org/pod/Test::More
29. Test::Class
• hilft, Test-Suites durch Objektorientierung zu organisieren
• fühlt sich wie JUnit an
• die eigentlichen Testfunktionen sind die von Test::More
• Doku: https://metacpan.org/pod/Test::Class
30. Test::Spec
• hilft beim Schreiben deklarativer Test-Suites
• ist an RSpec angelehnt und kommt aus der »behaviour
driven development«-Ecke
• Ausgabe liest sich wie Standard-TAP
• Doku: https://metacpan.org/pod/Test::Spec
31. Test::BDD::Cucumber
• ebenfalls von Ruby und BDD
• Tests sind fachlich in Klartext geschrieben und werden
per Regex auf Testfunktionen abgebildet
• Muster: given-when-then, »outside-in«
• Tutorial: https://metacpan.org/pod/distribution/Test-BDD-
Cucumber/lib/Test/BDD/Cucumber/Manual/Tutorial.pod
32. Devel::Cover
• Misst die Testabdeckung: Welcher Anteil meines Codes
wird durch Tests abgedeckt?
• generiert HTML-Seiten
• Plugin for Dist::Zilla existiert
• demo: »dzil cover«
33. Test::WWW::Mechanize
• benutzt WWW::Mechanize zum automatisierten Testen
von Webseiten
• spricht HTTP und HTML, aber kein Javascript
• emuliert somit keinen ganzen Browser, ist aber dafür sehr
schnell
• Kandidat für Smoke-Tests
• Doku: https://metacpan.org/pod/Test::WWW::Mechanize
34. Brownie
• an capybara angelehnt (ruby)
• einfache DSL zum Testen von Webseiten
• hat als Treiber Mechanize und Selenium
• minimal aber vielversprechend
• wird anscheinend nicht gepflegt
• Doku: https://metacpan.org/pod/Brownie