Upgrade to Pro — share decks privately, control downloads, hide ads and more …

OpenRheinRuhr: The Renaissance of Perl

Renee
November 09, 2013

OpenRheinRuhr: The Renaissance of Perl

Perl ist alt und riecht schon leicht modrig. Das denken auf jeden Fall die Personen, die sich schon länger nicht mehr mit Perl beschäftigt haben. Dabei hat sich in den letzten Jahren einiges -- auch innerhalb der Perl-Community -- getan. Dieser Vortrag stellt einige dieser Neuerungen vor.

Perl ist unleserlich! Das kann man machen, (muss|sollte) man aber nicht.
Perl ist bei Perl 5 stehen geblieben. Die Sprache heißt Perl5 und ist in der Version 18.x veröffentlicht (Perl5 18.x kommt im Mai 2013 heraus).
Perl5 + Web = CGI.pm. Ja, vor über 10 Jahren. Heute benutzt man andere Techniken.
Das Objektsystem in Perl5 ist so umständlich. Ein Elch und sein Gefolge kann helfen!
Das Bauen und Ausliefern von Perl5-Paketen ist umständlich. Nicht wenn man seine Tools kennt.

Diese fünf Punkte zeigen, dass sich in den letzten Jahren einiges getan hat. Ich möchte den Zuhörern diese Änderungen zeigen und zum Einsatz der Features und Pakete ermuntern.

Renee

November 09, 2013
Tweet

More Decks by Renee

Other Decks in Programming

Transcript

  1. Änderungen seit Perl 5.8.x • Verbesserte Unicode-Unterstützung – Unicode 6.2

    – Bessere Unterstützung in Regulären Ausdrücken • Regex-Engine komplett neu geschrieben • Geschwindigkeitsverbesserungen • Smart-Match • Immer weniger „große“ Änderungen
  2. $ cpanm Mojolicious --> Working on Mojolicious Fetching http://www.cpan.org/authors/id/A/AM/AMS/Mojolicious-4.26.tar.gz Configuring

    Mojolicious-4.26 ... OK Building and testing Mojolicious-4.26 ... OK Successfully installed Mojolicious-4.26 (upgraded from 4.23) 1 distribution installed
  3. $ cat community/.plenv-version 5.18.0 $ cat community/test.pl #!/usr/bin/perl use strict;

    use warnings; use feature 'say'; say $]; $ perl community/test.pl 5.018000
  4. $ cat .plenv-version 5.14.0 $ cat test.pl #!/usr/bin/perl use strict;

    use warnings; use feature 'say'; say $]; $ perl test.pl 5.014000
  5. $ cat community/.plenv-version 5.18.0 $ cat community/test.pl #!/usr/bin/perl use strict;

    use warnings; use feature 'say'; say $]; $ PLENV_VERSION=5.14.0 \ perl community/test.pl 5.014000
  6. $ dzil setup What's your name? Renee Baecker What's your

    email address? [email protected] Who, by default, holds the copyright on your code? [Renee Baecker]: What license will you use by default (Perl_5, BSD, etc.)? [Perl_5]: Do you want to enter your PAUSE account details? [y/N]: config.ini file created!
  7. $ dzil new ORR [DZ] making target dir /home/reneeb/ORR [DZ]

    writing files to /home/reneeb/ORR [DZ] dist minted in ./ORR $ tree ORR/ ORR/ ├── dist.ini └── lib └── ORR.pm 1 directory, 2 files
  8. $ dzil new ORR [DZ] making target dir /home/reneeb/ORR [DZ]

    writing files to /home/reneeb/ORR [DZ] dist minted in ./ORR $ tree ORR/ ORR/ ├── dist.ini └── lib └── ORR.pm 1 directory, 2 files
  9. name = ORR author = Renee Baecker <[email protected]> license =

    Artistic_2_0 copyright_holder = Renee Baecker copyright_year = 2013 version = 0.001 [@Basic]
  10. name = ORR author = Renee Baecker <[email protected]> license =

    Artistic_2_0 copyright_holder = Renee Baecker copyright_year = 2013 version = 0.001 [@Basic] [@Git]
  11. name = ORR author = Renee Baecker <[email protected]> license =

    Artistic_2_0 copyright_holder = Renee Baecker copyright_year = 2013 version = 0.001 [@Basic] [@Git] [AutoPrereqs]
  12. name = ORR author = Renee Baecker <[email protected]> license =

    Artistic_2_0 copyright_holder = Renee Baecker copyright_year = 2013 version = 0.001 [@Basic] [@Git] [AutoPrereqs] [UploadToCPAN]
  13. name = ORR author = Renee Baecker <[email protected]> license =

    Artistic_2_0 copyright_holder = Renee Baecker copyright_year = 2013 version = 0.001 [@Basic] [@Git] [AutoPrereqs] [UploadToCPAN] [PodWeaver]
  14. name = ORR author = Renee Baecker <[email protected]> license =

    Artistic_2_0 copyright_holder = Renee Baecker copyright_year = 2013 version = 0.001 [@Basic] [@Git] [AutoPrereqs] [UploadToCPAN] [PodWeaver] [Test::Perl::Critic]
  15. Standard Perl5-OO • Nachträglich eingebaut • Kann manche Paradigmen nicht

    erfüllen • Flexibel (zu flexibel?!?) • Viel Schreibarbeit bleibt beim Autor hängen
  16. package ORR::Person; use Moose; has 'lastname' => (is => 'ro',

    isa => 'Str' ); has 'firstname' => (is => 'ro', isa => 'Str' );
  17. package ORR::Speaker; use Moose; extends 'ORR::Person'; has 'talks' => (is

    => 'rw', isa => 'ArrayRef' ); has 'email' => (is => 'rw', isa => 'Str' );
  18. use ORR::Speaker; my $speaker = ORR::Speaker->new( firstname => 'Renee', lastname

    => 'Baecker', talks => [ 'The Renaissance of Perl', ], ); $speaker->email( '[email protected]' );
  19. use Moose::Util::TypeConstraints; use Regexp::Common qw(Email::Address); subtype EMail => as 'Str'

    => where { /^$RE{Email}{Address}$/ }; has 'email' => (is => 'rw', isa => 'EMail');
  20. use ORR::Speaker; my $speaker = ORR::Speaker->new( firstname => 'Renee', lastname

    => 'Baecker', talks => [ 'The Renaissance of Perl', ], ); $speaker->email( '[email protected]' ); OK
  21. use ORR::Speaker; my $speaker = ORR::Speaker->new( firstname => 'Renee', lastname

    => 'Baecker', talks => [ 'The Renaissance of Perl', ], ); $speaker->email( '[email protected]@orr' ); FAIL
  22. method buy_ticket ( Str :$type = 'Visitor', DateTime :$date!, Bool

    :$online ) { say "This is a $type ticket"; }
  23. class_type 'DateTime' => {class => 'DateTime'}; coerce 'DateTime' => from

    'Str' => via { my ($day, $month, $year) = split /\./; DateTime->new( day => $day, month => $month, year => $year, ); };
  24. method buy_ticket ( Str :$type = 'Visitor', DateTime :$date! does

    coerce, Bool :$online ) { say "This is a $type ticket"; }
  25. use Mojolicious::Lite; get '/' => sub { my $self =

    shift; $self->render( text => 'hello world' ); }; app->start;
  26. $ morbo orr.psgi [Sun Aug 25 07:30:44 2013] [info] Listening

    at "http://*:3000". Server available at http://127.0.0.1:3000.
  27. get '/event/:name' => sub { my $self = shift; my

    $name = $self->param('name'); $self->render( text => "hello $name" ); };
  28. get '/user/:name' => sub { my $self = shift; $self->render(

    'user' ); }; __DATA__ @@user.html.ep <html><body>hello <%= $name %></body></html>
  29. get '/event/:name' => sub { my $self = shift; my

    $name = $self->param('name'); $self->render( text => "hello $name" ); };
  30. get '/event/:name' => sub { my $self = shift; my

    $name = $self->param('name'); $self->render( json => {txt =>"hello $name"} ); };
  31. $ perl -Mojo -E ' > say g( > "http://programm.openrheinruhr.de/2013/events/177.de.html"

    > ->dom("h2") > ->text > ' lecture: The Renaissance of Perl
  32. my $date = '2013-08-25'; $date =~ m{ (\d{4})- # year

    (\d{2})- # month (\d{2}) # day }x; say sprintf “today is day %s of month %s in year %s”, $3, $2, $1;
  33. my $date = '2013-08-25'; $date =~ m{ (\d{4})- # year

    ( (\d{2}) | # month nr (\w+) # monthname )- (\d{2}) # day }x; say sprintf “today is day %s of month %s in year %s”, $3, $2, $1;
  34. • Nummern sind Schall und Rauch, Namen bleiben ;-) •

    Syntax (?<name>...) • Werte landen im Hash %+
  35. my $date = '2013-08-25'; $date =~ m{ (?<year>\d{4})- (?<month> (\d{2})

    | (\w+) )- (?<day>\d{2}) }x; say sprintf “today is day %s of month %s in year %s”, $+{day}, $+{month}, $+{year};
  36. Code-Layout Namenskonventionen Werte und Ausdrücke Variablen Kontrollstrukturen Dokumentation Fest eingebaute

    Funktionen Unterroutinen I/O Referenzen Reguläre Ausdrücke Fehlerbehandlung Kommandozeilen-Verarbe itung Objekte Klassenhierarchien Module Testen und Debugging Vermischtes