• Advancing Perl 2010 (Luga 2010)

    1. Wer bin ich?

      1. Ulrich Habel

      2. NetBSD Projekt

      3. Autor

    2. Veränderungen zu 5.8.x

      1. Zeit zu aktualisieren! 5.10.1 ist draussen!

      2. feature Pragma

        1. Neue Funktionen einschalten, die die Rückwärtskompatiblität brechen

      3. -E Switch

        1. Einschalten aller neuen Features

      4. Defined-or // operator

      5. Switch and Smart match Feature

        1. given ($foo) { when (/^abc/) { $abc = 1; } when (/^def/) { $def = 1; } when (/^xyz/) { $xyz = 1; } default { $nothing = 1; } }

      6. regex Power

      7. say()

        1. use feature qw(switch say); # oder use feature ':5.10';

        2. Lexical! Wow: { use feature 'say'; say "Yay!"; }

      8. Lexical $_

        1. { my $_; # ... print $_ . "\n"; }

    3. Vorbemerkungen

      1. Perl funktioniert - immer

      2. leider...

      3. Google...

      4. Perl 6

        1. Perl 6?

        2. Aufwachen!

        3. AUFWACHEN!

        4. Willkommen im Jetzt!

        5. Perl6 Features in Perl5

    4. Enlightened Perl

      1. Organisation

      2. Unterstützung von Projekten

        1. mit Finanzen

        2. mit Ressourcen

      3. http://enlightenedperl.org

    5. DBIx::Class

      1. ORM (Object Relational Mapper) für Perl

      2. alte Welt

        1. select a, b from user where userid = 127;

        2. Bruch zwischen Perl und SQL im Code

      3. neue Welt

        1. my $results = $obj->resultset( ‘User’ ) ->search( #.. );

      4. Einsatz von DBIx::Class

        1. result class = table

        2. sql query in DBI entspricht DBIx::Class::ResultSet

        3. Wichtig! Das Erzeugen eines ResultSets führt keine Abfrage durch!

        4. Schema Klasse

          1. package BR::Database::Schema; use base qw/DBIx::Class::Schema/; # Laden BR::Database::Schema::Result::* und resultset classes __PACKAGE__->load_namespaces(); 1;

          2. package BR::Database::Schema::Result::Mediabox; use base qw/DBIx::Class/; __PACKAGE__->load_components(qw/Core /); __PACKAGE__->table('Mediabox'); __PACKAGE__->add_columns( Mpath => { data_type => 'varchar', size => 255, is_nullable => 0, default_value => '' }, Publishdate => { data_type => 'integer', is_nullable => 0, default_value => '', }, ); __PACKAGE__->set_primary_key(qw/Mpath/); 1;

          3. my $rs = $self->schema->resultset('Mediabox')->search( { Mpath => $mpath } )->first;

          4. Beziehungen können im Code definiert werden

            1. __PACKAGE__->has_one( 'Media' => 'My::DB::Media', {'foreign.ID' => 'self.ID'} );

        5. Auslesen bestehender Datenbanken (Schreiben der Klassen)

        6. Database Deployment (Code Veränderung)

    6. Catalyst

      1. The elegant MVC framework

      2. http://www.catalystframework.org/

      3. Terminologie

        1. Model

        2. View

        3. Controller

      4. Trennen der einzelnen Schichten

      5. Model: DBIx::Class

      6. View: TT2, Mason, Template::Declare, HTML::Template

      7. Enterprise Ready?

        1. Yeo! :) (aber zensiert :) )

        2. bspw. http://vox.com

      8. Quick View

        1. Anlegen einer Applikation

        2. Controller hinzufügen

        3. View hinzufügen

    7. Moose

      1. Postmodern Object System für Perl 5

      2. Schon da :)

      3. Akademisch korrekt OOP

      4. OOP bislang?

        1. Package

        2. Subs im Package

        3. Accessor handgeschrieben

        4. A Class is Simply a Package (perlobj)

      5. und jetzt?

        1. Objekte werden durch Attribtute beschrieben

        2. use strict; use warnings;

          1. default!

        3. sub new {}

          1. built-in!

        4. sub get_..... {}

          1. built-in!

        5. Types!

        6. Roles!

      6. neugierig?

      7. Moose Beispiel

        1. Motorrad

          1. Marke

          2. Farbe

            1. default:rot

        2. Beispielprogramm

          1. #!/bin/env perl use Motorrad; my $fhz = Motorrad->new( marke => "Ducati" ); print $fhz->name; print $fhz->farbe; my $love = Motorrad->new ( marke => "BMW", farbe => "gelb" ); # ugh! Gelbe BMWs $love->farbe( "silber" );

        3. pre-moose

          1. #!/bin/env perl package Motorrad; use warnings; use strict; sub new { my ( $class, %opts ) = @_; my $self = { marke = $opts{ marke }, farbe = $opts{ farbe } || "rot", }; return bless $self, $class; } sub marke { my $self = shift; if (@_) { $self−>{marke} = shift } return $self−>{marke}; } sub farbe { my $self = shift; if (@_) { $self−>{farbe} = shift } return $self−>{farbe}; } 1;

        4. moose!

          1. #!/bin/env perl package Motorrad; use Moose; has marke => ( is => 'rw', isa => 'Str', ); has farbe => ( is => 'rw', isa => 'Str', default => 'rot', ); 1;

      8. Attribute

        1. Beschreibung eines Objekts

          1. Syntax: has "attribute name" => ( # attribute definition };

        2. Zugriff

          1. is => 'rw' is => 'ro'

        3. Type

          1. isa => 'Str' isa => 'Int' isa => 'ArrayRef' isa => 'HashRef' isa => 'Date::Time'

          2. Möglichkeit der eigenen Definition

            1. Motorrad Typdefinition

            2. subtype 'Gattung'     => as 'Str'     => where { /^(?:Supersport|Enduro)$/ }     => message { "$_ ist keine gueltige Gattung (Supersport, Enduro)" }; has motorradart => (     isa => "Gattung",     is => "ro",     required => 1,     documentation => "Gattung des Motorrads muss angeben werden.", );

        4. Default Werte

          1. default => 'String' default => 12345 default => sub{ [] } default => sub{ {} }

        5. Required?

          1. required => 1

      9. Roles

        1. "Interface" im Java Jargon

        2. Geeignet zum Aufteilen von Objekten

        3. "includes"

      10. Example Session - the bicycle workshop

    8. Fragen?

      1. VIELEN DANK! (email: Ulrich Habel

  • All Comments ( 0 )

    Advancing Perl 2010 (Luga 2010)

    Added: 2010-03-27 11:14:01

    From: rabenfeder (Joined 2009-07-04 10:16:53)

    348 views |56 downloads

    Advancing Perl 2010 (Luga 2010)

    More From: rabenfeder

    Advancing Perl
2010
(Luga 2010)
    Advancing Perl 2010 (Luga 2010)
    2010-03-27 11:14:01|348 views