Perl vergessen und unterschätzt
Sebastian Willing CPAN: sewi Blog: www.pal-blog.de print Dumper(\%speaker); Jahrgang 1979 Erste Programmierversuche ~1988 Perl seit 1997 Padre, the Perl IDE Seit 2011 bei (und Vorgängern) Perl, MovableType, ecommerce, Webdesign, u.v.m. www.spark5.de sebastian.willing@spark5.de Privat: 2 Kinder, Buchautor, Hobbypilot
Perl?
(außer Niemand nutzt heute noch Perl! Aber wen interessiert das? )
Viel interessanter ist... Die meisten Unternehmen nutzen Perl! Schnittstellen Serveradministration Datenkonvertierung Kleine Tools u.v.m. (Aber kaum jemand weiß davon)
Geschichte Perl history in brief, by Larry Wall:
Modernes Perl! stable since 1994 PSGI/Plack
Perl 2014 Stabil = quasi bugfrei Plattformunabhängig Einfach erlernbar OOP (freiwillig) RegEx: Mehr als PCRE TIMTOWTDI There is more than one way to do it Abwärtskompatibel
Perl 2014 CPAN Dancer Moose Data::ObjectDriver Template::Toolkit PSGI/Plack Test::More
http://search.cpan.org 30.417 Module 138.497 Dateien 11.743 Contributors/Uploaders Standartisierte Installation Systemweit oder im Userverzeichnis Automatische Abhängigkeiten CPAN-Testers
Dancer Web-Framework Einfach zu lernen flexibel & mächtig Plugins (z.b. Sessioning, Datenbanken, Auth, Ajax, REST, Logging, Gearman, etc.) Standalone, Apache/NGINX, FastCGI, PSGI/Plack, usw. Konzentration auf das Wesentliche
Dancer: Neue App $ dancer a MyApp The latest stable Dancer release is 1.3130, you are currently using 1.312. Templates Please check http://search.cpan.org/dist/dancer/ for updates. + MyApp/views/index.tt + MyApp/views/layouts Standalone-Webserver + MyApp/views/layouts/main.tt + MyApp/Makefile.PL + MyApp/bin/app.pl Environments + MyApp/environments/production.yml + MyApp/environments/development.yml Projekt-Config + MyApp/config.yml + MyApp/public + MyApp/public/images Verzeichnis für statische Dateien + MyApp/public/css + MyApp/public/css/style.css Unit-Tests + MyApp/public/javascripts + MyApp/t/001_base.t + MyApp/lib/MyApp.pm App-Modul
package MyApp; use strict; use warnings; Dancer: Beispiel use Dancer; use MyApp::User; Alle /admin URIs nur für Admins hook 'before' => sub { forward '/' if request >path_info =~ /^\/admin\// /user_info/12345 and!session('is_admin'); }; get '/user_info/:userid' => sub { my $user = MyApp::User >lookup(param('userid')) or forward '/user_not_found'; User via ORM laden }; template 'user_info.tt', { user => $user }; Template & Parameter
package MyApp; use strict; use warnings; use Dancer; use MyApp::User; Dancer: Beispiel hook 'before' => sub { forward '/' if request >path_info =~ /^\/admin\// and!session('is_admin'); }; get '/user_info/:userid' => sub { template 'user_info.tt', { user => MyApp::User >lookup(param('userid')) or forward '/user_not_found' }; }; Kompakter
Moose Post-modern object system for Perl Erweiterungen für Perl's natives OOP Perl Moose use MooseX::Declare; use Method::Signatures::Modifiers; class MyClass { has 'version' => { is => 'ro', isa => 'Str', Default => '1.0', }; method twice (Int $bar) { } } return 2 * $bar; package MyClass; our $VERSION = '1.0'; oder: sub version { return '1.0'; } sub twice { my $self = shift; my $bar = shift; return 2 * $bar; }
Data::ObjectDriver ORM für relationale Datenbanken Caching-Support (z.b. Memcache) Partitionierung Unterstützung für mehrere Datenbanken Tabellen-Spalten werden zu Methoden Optional zusätzliche Methoden Alternativen: z.b. DBIx::Class, Class::DBI, RoseDB
Template::Toolkit Beliebte Perl Template-Engine Vielfältig konfigurierbar Einfach Erweiterbar OOP-Support Nicht auf HTML beschränkt Templates werden zu Perl-Code kompiliert Template-Caching Standalone-Tool ttree
Template::Toolkit - Alternativen PHP ( Perl Hypertext Preprocessor ) MovableType, Mojolicious, Catalyst u.a. unterstützen PHP als Template-Engine CPAN-Module PHP und PHP::eval führen PHP- Source in Perl aus Text::Clevery Smarty-Implementation in Perl (CPAN) 4907 Template-Module auf CPAN
PSGI/Plack Abstraktionslayer für Web-Apps Einheitliche Schnittstelle zwischen Webserver und App Inspiriert von Python's WSGI und Ruby's Rack Module/Plugins für Apache & Nginx Standalone-Webserver (z.b. Starman, Twiggy) Unterstützt von (nahezu) allen Perl-Frameworks >380 Middleware-Plugins (Logging, Auth, Profiling, Stats, Debugging, Filter, Compress, etc.)
Test::More Wer braucht schon Tests, wir sind doch alle perfekt! Test::More Einfache Unittests in Perl Test::WWW::Mechanize Web-Tests Überraschung: ~5000 Test-Module auf CPAN
use Test::More tests => 25; Test::More use_ok('myapp::somemodule'); # Compile test Modul compilieren und laden als Test ok(my $obj = MyApp::SomeModule >new, 'Create object'); isa_ok($obj, 'MyApp::SomeModule'); Objekt instanzieren note( Object is $obj ); Debug Meldung 1 == 1? is($obj >one, 1, 'Check one'); 1!= 0? isnt($obj >one, 0, 'Check not one'); cmp_ok($obj >two, '>', 1, 'Check two'); 2 < 1? like($obj >answer, qr/^\d\d$/, 'Check answer to all questions'); TODO: { RegEx-Check local $TODO = will be fixed sometimes or never ; is($obj >pi, 3.1415, 'Pi'); # Currently returns 42 }; Test schlägt fehl = TODO
Ausprobieren! Windows StrawberryPerl oder ActivePerl http://strawberryperl.com/ Kostenlos Inkl. IDE & CPAN-Client Linux (inkl. Mac OS) Vorinstalliert (meist im Distributions-Core) IDEs: Padre http://padre.perlide.org (kostenlos) EPIC (Eclipse-Plugin) u.v.a. http://learn.perl.org/
Fragen?
Vielen Dank fürs zuhören http://www.pal-blog.de sebastian.willing@spark5.de http://www.spark5.de https://twitter.com/pal_blog https://www.facebook.com/sebastian.willing https://plus.google.com/u/0/+sebastianwilling