Wir freuen uns, den zweiten Beitrag unserer kleinen Perl-Reihe zu veröffentlichen, nicht zuletzt, weil heute ein besonderer Tag ist: Katrin und Renée Bäcker, der Autor dieses Artikels, heiraten!
($/,$%,$.,$-)=(gmtime($^T+=86400))[3..6]while($/-12)/4|$–2||++$“&printf 1900+$..“-%02d-%02d\n“,++$%,$/==8?8:$/-7
Ja, das ist tatsächlich ein Perl-Programm. Es gibt die nächsten beiden Termine der Frankfurt Perlmongers aus.
Nein, das ist kein typisches Perl-Programm! Jedenfalls nicht von Perl- Programmierern, die „modern“ programmieren. Gerade in Teams ist so ein unlesbarer Code „tödlich“. Die Art Perl zu programmieren, hat sich in den letzten Jahren stark verändert. Dank CPAN und den vielen Perl-Programmierern gibt es viele Module, die das Leben vereinfachen und Perl modernisiert haben.
Eine ganz simple Sache ist „use strict“. „strict“ gibt es seit sehr vielen Jahren, aber leider fehlt in vielen Büchern der Hinweis auf „use strict“ vollständig, dabei ist das ein erstes gutes Mittel zur Fehlervermeidung. Es zwingt den Programmierer, Variablen zu deklarieren – und damit auch, sich darüber Gedanken zu machen, in welchem Bereich die Variable sichtbar sein soll.
Den Anfang bereitete das Buch „Perl Best Practices“ von Damian Conway. Es hat einen ersten Ansatz für „Best Practices“ gezeigt. In vielen Firmen wird dieses Buch als Programmierrichtlinie eingesetzt – und so wird ein einheitlicher Programmierstil gefördert. Es besteht sogar die Möglichkeit, seine Mitarbeiter dazu zu „zwingen“, sich danach zu richten: Je nach VCS kann man Überprüfungen (Filter bzw. Hooks) einbauen, die bei jedem Commit den Code auf Einhaltung der „Best Practices“ überprüfen. Dafür gibt es das Modul „Perl::Critic“. Wer das Modul kennenlernen will, ohne es zu installieren, kann seinen Code auf der Homepage unter http://perlcritic.com prüfen lassen
Auch bei der Webentwicklung hat sich viel getan. Vielen dürfte „Matt’s Script Archive“ ein Begriff sein. Das ist eine jener Websünden, die man nie mehr los wird. So sieht Webentwicklung mit Perl heute bestimmt nicht mehr aus! Heute dürfte Catalyst das meistbenutzte Webframework in Perl sein. Es fördert die saubere Trennung nach dem Model-View-Controller-Prinzip und durch die vielen frei verfügbaren Plugins, hat man seine Aufgaben schnell erledigt.
Die Vielzahl der Plugins wird von einigen aber auch kritisch gesehen. Es ist nur wenig im Standard enthalten. Wer mehr haben möchte, muss sich die Plugins erst installieren. Durch apt oder CPAN.pm ist das in den meisten Fällen aber kein Problem.
Wer sich mit dem Thema „Datenbanken und Perl“ auseinandergesetzt hat, wird ziemlich sicher auf das Modul DBI gestoßen sein. Wenn man DBI pur einsetzt, hat das allerdings zur Folge, dass man im Perl-Code früher oder später SQL stehen hat. Man muss sich auch selbst um das Handling der Daten kümmern. Da das nicht immer erwünscht ist, kommt eine weitere Abstraktionsebene hinzu: Das object-relational mapping.
Unter Perl-Programmierern hat sich in diesem Bereich DBIx::Class durchgesetzt. Damit muss man sich nicht mehr um die SQL-Befehle kümmern.
Ein Nachteil von Perl gegenüber anderen Sprachen ist sicherlich, dass die Objektorientierung nicht von Anfang an Bestandteil der Sprache war und erst mit Perl 5 nachträglich eingebaut wurde. Dadurch ist die Syntax und der „Aufwand“ für Objektorientierung in Perl gerade für Einsteiger gewöhnungsbedürftig. Aber es gibt zum Glück CPAN. Dort findet man ein Modul, das sich in den letzten Jahren für Objektorientierung etabliert hat: Moose.
Damit lässt sich einfach und gut lesbar Objektorientierter Perl-Code schreiben. Hier mal ein kleines Beispiel aus ‚Ovids‘ Test::Class-Tutorial:
package Person; use Moose; has first_name => ( is => 'rw', isa => 'Str' ); has last_name => ( is => 'rw', isa => 'Str' ); sub full_name { my $self = shift; return $self->first_name . ' ' . $self->last_name; } 1;
Moose ist sehr mächtig, bietet allerlei Möglichkeiten und nimmt dem Programmierer einiges an Arbeit ab – so wird z.B. der Konstruktor und der Destruktor genauso wie die Zugriffsmethoden auf Attribute automatisch erzeugt. Auf der Webseite von Moose heißt es so schön „[Moose] borrows all the best features from Perl 6, CLOS (LISP), Smalltalk, Java, BETA, OCaml, Ruby and more …“.
Perl 6 hat aber nicht nur Moose beeinflusst, sondern noch mehr Einfluss auf Perl 5. Einige Ideen wurden in Modulen auf CPAN veröffentlicht, andere wurden direkt in Perl 5.10.x implementiert. So gibt es ab Perl 5.10 das Smart-Matching, das sehr mächtig bei Überprüfungen ist.
if( 9 ~~ @array ) { say "9 ist enthalten"; } if( 'schluessel' ~~ %hash ){ say "im Hash gibt es den Schluessel schluessel"; }
Ein weiteres Beispiel ist „given/when“, das dem switch-case Konstrukt aus anderen Sprachen entspricht.
given( $x ){ when( 'hallo' ){ print "Hallo Welt"; } }
chromatic hat übrigens ein eigenes Blog zum Thema „Modern Perl“. Dort beschreibt und diskutiert er verschiedene Aspekte der Programmierung und wie sie bei Perl gemacht werden (können).
Über den Autor: Renée Bäcker ist seit 2002 begeisterter Perl-Programmierer und seit 2003 selbständig. Auf der Suche nach einem Perl-Magazin ist er nicht fündig geworden und hat selbst das Perl-Magazin „$foo“ gestartet. In der Perl-Community ist Renée recht aktiv – als Moderator bei Perl-Community.de, Organisator des kleinen Frankfurt Perl-Community Workshop und Mitglied im Orga-Team des deutschen Perl-Workshops.