Auf dem Comprehensive Perl Archive Network (CPAN) finden Perl-Programmierer unzählige Informationen, die das Leben im Programmieralltag erleichtern. Darunter auch eine umfassende Sammlung von Perl-Modulen, -Routinen und -Programmen für die unterschiedlichsten Aufgaben. In dieser Rubrik stellen wir Ihnen interessante und neue Module und Programme vor. Das CPAN erreichen Sie unter www.cpan.org/.
Text::RecordParser
Text::RecordParser [1] wurde für die Arbeit mit Datenfiles entwickelt. Sie können damit Daten im CSV-Format schnell und einfach bearbeiten. Dazu bestimmen Sie zuvor das verwendete Trennzeichen und können nun über Methoden auf die Inhalte der Datei lesend und schreibend zugreifen. Manchmal ist es notwendig, bestimmte Zeilen in Dateien zu ignorieren, denken Sie dabei beispielsweise an Kommentare. Solche Zeilen können Sie bequem über die Deklaration der Anfangszeichen ausblenden.
Params::Check
Params::Check [2] ermöglicht das Parsen und Überprüfen von Usereingaben. Dazu bestimmen Sie die Kriterien über eine Hash-Struktur, in der alle Regeln und Bedingungen für die Eingabe enthalten sind. Das Modul überprüft nun, ob alle relevanten Angaben erfolgt sind und ob die korrekte Schreibweise eingehalten wurde. Es kann zusätzlich alle Parameter in Kleinschreibung umwandeln.
Net::Domain::ExpireDate
Das Modul Net::Domain::ExpireDate [3] bezieht das Verfallsdatum einer Domain aus den WHOIS-Informationen. Dabei werden über 40 verschiedene Zeitformate unterstützt, was auch notwendig ist, da viele WHOIS-Server die unterschiedlichsten Datumsformate zurückgeben. Für vergessliche Domaininhaber oder Übernahmewillige fremder Domains ein nützliches Modul.
Net::EasyTCP
Mit Hilfe von Net::EasyTCP [4] erstellen Sie auf einfache Weise TCP/IP-basierte Client/Server-Anwendungen. Das Modul stellt ein OO-Interface zur Verfügung, um die Verbindungen komfortabel zu administrieren. In Ihren Anwendungen müssen Sie mit dieser Klasse lediglich die Befehle erzeugen. Den Austausch der Daten übernimmt das Modul, d.h. Sie müssen sich nicht um Aufgaben wie Zeilenseparatoren, Verschlüsselung, Kompression oder Serialisierung und dgl. kümmern. Konzentrieren Sie sich voll und ganz auf Ihre Anwendung.
Readonly
Readonly [5] ermöglicht es Variablen zu erzeugen, die nur lesbar und somit nicht veränderbar sind. Dies kann beispielsweise für Konfigurations- oder Header-Informationen sinnvoll sein. Bei der Übergabe dieser Variablen in eine Array- oder Hash-Struktur werden diese ebenfalls nicht mehr veränderbar. Es gibt eine Alternative, um nur die entsprechende Variable vor dem Überschreiben zu schützen. Sie könnten für diese Aufgabe auch use constant oder typeglob verwenden, dabei ergeben sich aber etliche Einschränkungen, weshalb die Verwendung dieses Moduls die bessere Wahl sein könnte.
String
String [6] ist ein Klassenmodul, welches ein String-Objekt bereitstellt. Das Modul bietet zahlreiche Methoden zur täglichen Arbeit mit Zeichenketten. Darunter findet man Routinen zum Zerlegen (split) und Auslesen von Informationen wie beispielsweise indexOf() zum Testen, ob eine Zeichenfolge innerhalb eines Strings vorkommt oder nicht. Die Anwendung der Methoden erinnert stark an JavaScript. Aber sehen Sie selbst...
XML::Smart
XML::Smart [7] ermöglicht es, XML-Dateien mit einer einfach anzuwendenden Syntax zu erzeugen oder auszulesen. Die jeweiligen Knotenpunkte werden dabei intern als Hash-Struktur dargestellt, was die Verwendung weiter vereinfacht. Für die Arbeit sind Methoden zur Suche nach Knoten-Elementen oder die Selektion von Werten eines Elements im Packet enthalten. Binäre Daten werden automatisch korrekt in das richtige Format umgewandelt und eine Unterstützung von Unicode ist ebenfalls implementiert. Dieses Modul ist eine empfehlenswerte Alternative zu XML::Simple [8].
Config::Crontab
Config::Crontab [9] stellt eine OO-Schnittstelle für die Arbeit mit Crontab-Dateien im Vixie-Format bereit. Die Organisation der Inhalte ist mit diesem Modul recht einfach. So können Sie Kommentare, Events (also Aufgaben) und Env-Objekte über einfach anzuwendende Methoden einfügen. Über die Block-Anweisung können Befehle über mehrere Zeilen hinweg bestimmt werden. Zahlreiche Methoden helfen beim Editieren bestehender Crontab-Dateien. So ist es beispielsweise möglich, bestimmte Blöcke in ihrer Anordnung zu verschieben oder komplett aus der Datei zu löschen.
SQL::Abstract
Das Modul SQL::Abstract [10] ist im Gegensatz zu seinem Namen für Perl-Programmierer eher klar und deutlich. Statt mit langen SQL-Statements arbeiten zu müssen, können Sie damit Ihre Abfragen mittels einer Hash-Struktur darstellen. INSERT-Anweisungen und komplexe WHERE-Klauseln werden somit zum Kinderspiel. Nützliche Methoden wie beispielsweise case (welche das SQL in Kleinbuchstaben konvertiert), runden den Funktionsumfang dieses Moduls ab.
Text::vCard
Text::vCard [11] stellt Ihnen eine API zum lesen und schreiben so genannter vCards zur Verfügung. Eine vCard ist eine elektronische Visitenkarte, basierend auf einem offiziellen Standard, beschrieben in RFC2426 [12]. Über die Methoden des Moduls können Sie nun auf jede Information der vCard zugreifen und diese bei Bedarf verändern. Erweiterte Methoden zum Anzeigen von binären Daten wie beispielsweise ein Foto oder das Firmenlogo erlauben den einfachen Zugriff auf diese Art von eingebundenen Informationen.
Algorithm::MinMax
Das Modul Algorithm::MinMax [13] ermittelt den minimalen und maximalen Wert eines Arrays. Dazu genügt es, der Methode das Array-Objekt zu übergeben. Als Ergebnis erhalten Sie wiederum ein Array mit zwei Elementen, und zwar den kleinsten und größten Wert der abgefragten Struktur.
Johannes Gamperl ist freier Journalist und selbstständiger Programmierer. Im Internet ist er unter seiner Firmenseite www.jg-webdesign.de/ oder seinem Portal für Webentwickler www.devshare.de/ zu erreichen.
Beispiel SQL::Abstract
Um Ihnen die Arbeitsweise von SQL::Abstract zu verdeutlichen, sehen wir uns nachfolgend zwei typische Aufgaben bei der Arbeit mit Datenbanken an. Im ersten Fall fügen wir Daten in eine Tabelle mittels der INSERT-Anweisung ein. Das zweite Beispiel zeigt eine Suchanfrage innerhalb einer Tabelle mit Hilfe der WHERE-Klausel. Wenden wir uns zunächst dem ersten Beispiel zu und definieren dazu einen Hash mit der Datenstruktur, welche in die Tabelle users eingefügt werden soll.
my %data = (
name => 'Franz Mustermann',
telefon => '0123 456789',
adresse => 'strasse nr. 1',
stadt => 'münchen',
alter => '32',
);
my(, @bind) = ->insert('users', \%data);
Mehr ist nicht zu erledigen, um das SQL-Query für die Datenbank vorzubereiten. Üblicherweise hätten Sie diese Aufgabe beispielsweise wie folgt gelöst:
= "INSERT INTO users
name, telefon, adresse, stadt, alter)
VALUES (?, ?, ?, ?, ?)";
@bind = ('Franz Mustermann', '0123 456789', '´strasse nr. 1',
'münchen', '32');
Wie man erkennen kann, ist dieser Weg wesentlich umständlicher und wohl auch fehleranfälliger als die Schreibweise zuvor. Am Ende Ihrer Anweisungen müssen Sie diese lediglich dem DBI-Handler übergeben:
my = ->prepare();
->execute(@bind);
Ein weiteres Beispiel ist die Formulierung einer WHERE-Klausel, welche sich mit diesem Modul wie folgt schreiben lässt:
my %where = (
requestor => 'inna',
worker => ['nwiger', 'rcwe', 'sfz'],
status => { '!=', 'completed' }
);
my(, @bind) = ->select('tickets', '*', \%where);
Und hier wiederum die Ihnen bisher bekannte Schreibweise für diese Aufgabe:
= "SELECT * FROM tickets WHERE
( requestor = ? ) AND ( status != ? )
AND ( worker = ? OR worker = ? OR worker = ? )";
@bind = ('inna', 'completed', 'nwiger', 'rcwe', 'sfz');
Entscheiden Sie selbst, welche Art der Schreibweise Sie bevorzugen würden. Mir persönlich ist die des Moduls angenehmer ;o).
Links