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

The Renaissance of Perl

Renee
August 25, 2013

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

August 25, 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 FrOSCon [DZ] making target dir /home/reneeb/FrOSCon [DZ]

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

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

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

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

    Artistic_2_0 copyright_holder = Renee Baecker copyright_year = 2013 version = 0.001 [@Basic] [@Git] [AutoPrereqs]
  12. name = FrOSCon 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 = FrOSCon 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 = FrOSCon 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 FrOSCon::Person; use Moose; has 'lastname' => (is => 'ro',

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

    => 'rw', isa => 'ArrayRef' ); has 'email' => (is => 'rw', isa => 'Str' );
  18. use FrOSCon::Speaker; my $speaker = FrOSCon::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 FrOSCon::Speaker; my $speaker = FrOSCon::Speaker->new( firstname => 'Renee', lastname

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

    => 'Baecker', talks => [ 'The Renaissance of Perl', ], ); $speaker->email( '[email protected]@froscon' ); 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 froscon.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. 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;
  32. 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;
  33. • Nummern sind Schall und Rauch, Namen bleiben ;-) •

    Syntax (?<name>...) • Werte landen im Hash %+
  34. 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};
  35. 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
  36. Perl@FrOSCon C125 Talk 10:05 Perl 6 OO vs. Perl 5

    Moose 10:50 Perl & LaTeX 11:25 Complete Programming 12:00 Testing DBI Drivers Conformance 12:35 Perl 5 to Perl 6 Nuggets Part I 13:00 DuckDuckHack 14:00 Perl 5 to Perl 6 Nuggets Part II 14:35 Monitoring with Perl and Unix::Statgrab 15:20 Real Life Perl – Glueing The Pieces Together 15:45 Regex für Könner 16:20 Moving The Needle