Perl Renaissance Reloaded
Gregor Goldbach

glauschwuffel@nomaden.org
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 …
Paul Fenwick, »The Future is Awesome«, https://www.youtube.com/watch?v=c7TwbTtofLo
Überblick
• CPAN

• Frameworks

• Tools

• Testen
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)
MetaCPAN
vom API zum Platzhirsch
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
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/
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
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
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
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/
Frameworks
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/
Mojolicious-Boilerplate
• https://github.com/tudorconstantin/Mojolicious-
Boilerplate

• Mojolicous + Bootstrap + Font Awesome

• Demo
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
Moose (2)
• Attribute: https://metacpan.org/pod/distribution/Moose/
lib/Moose/Cookbook/Basics/
Point_AttributesAndSubclassing.pod

• Subtypen: https://metacpan.org/pod/
Moose::Util::TypeConstraints

• ausführliches Handbuch: https://metacpan.org/pod/
distribution/Moose/lib/Moose/Manual.pod
Toolshttps://blog.therestaurantzone.com/12-restaurant-recruiting-tools-to-try-out-today/
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
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/
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/
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
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';
};
Devel::NYTProf
• der Profiler

• misst Ausführungszeiten des Codes

• konvertiert Messdaten in HTML-Seiten

• Demo
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
Testenhttp://www.360logica.com/blog/effective-software-testing-tips-testers-go/
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
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
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
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
Devel::Cover
• Misst die Testabdeckung: Welcher Anteil meines Codes
wird durch Tests abgedeckt?

• generiert HTML-Seiten

• Plugin for Dist::Zilla existiert

• demo: »dzil cover«
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
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
Danke!
• Fragen?

• Anmerkungen?
35

Perl Renaissance Reloaded

  • 1.
    Perl Renaissance Reloaded GregorGoldbach glauschwuffel@nomaden.org
  • 2.
    Was soll dieserTitel? • 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, »TheFuture is Awesome«, https://www.youtube.com/watch?v=c7TwbTtofLo
  • 4.
  • 5.
    CPAN • »comprehensive Perlarchive network« • zentrale Sammelstelle für Perl-Erweiterungen • »Das Killer-Feature« oder »die Seele« von Perl • mit Perl 5 entstanden (vorher gab es keine Module)
  • 6.
  • 7.
    MetaCPAN • ursprünglich alsAPI 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 konnteman 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ührbarohne 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-Matrixwird 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, basiertauf 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/
  • 14.
  • 15.
    Mojolicious • modernes Frameworkvom 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/
  • 16.
  • 17.
    Moose • Perl5 hatsehr 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
  • 18.
    Moose (2) • Attribute:https://metacpan.org/pod/distribution/Moose/ lib/Moose/Cookbook/Basics/ Point_AttributesAndSubclassing.pod • Subtypen: https://metacpan.org/pod/ Moose::Util::TypeConstraints • ausführliches Handbuch: https://metacpan.org/pod/ distribution/Moose/lib/Moose/Manual.pod
  • 19.
  • 20.
    perltidy • formatiert Perl-Quelltextgemäß 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, abereinige 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 kommtWindows 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 wiepinto/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'; };
  • 25.
    Devel::NYTProf • der Profiler •misst Ausführungszeiten des Codes • konvertiert Messdaten in HTML-Seiten • Demo
  • 26.
    Dist::Zilla • »maximum overkillfor 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
  • 27.
  • 28.
    Test::More • Standard-Testmodul • bieteteinfache 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-Suitesdurch 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 beimSchreiben 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 vonRuby 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 dieTestabdeckung: 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::Mechanizezum 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 capybaraangelehnt (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
  • 35.