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/.
MySQL::Config
MySQL::Config [1] erlaubt es Ihnen, die Konfigurationsdatei von MySQL auszulesen, welche beim Start des Datenbankservers darin angegebene Funktionen in libmysqlclient ausführt. Das Modul bietet dazu zwei Methoden, welche beide die Informationen von
my.cnf in eine Datenstruktur zur weiteren Verarbeitung speichern. So können Sie mit Kommandozeilenargumenten (z.B.
--argument) oder über eine Hashstruktur auf die Inhalte zugreifen und diese weiter verarbeiten.
Text::ExtractWords
Text::ExtractWords [2] zählt in einem String das Vorkommen bestimmter Wörter und gibt das Ergebnis als Zahl zurück. Eine weitere Methode des Moduls sammelt die Treffer in einem Array, das anschließend verarbeitet und in den String zurück geschrieben werden kann.
WWW::Form
Das Modul
WWW::Form [3] erzeugt beliebige HTML-Formulare über eine einfach anzuwendende Syntax. Dabei können Sie ohne großen Aufwand die Usereingaben in ein Formular auslesen, weiterverarbeiten und überprüfen. Fehlerhafte Eingaben oder nicht eingetragene Pflicht-Felder werden automatisch überprüft und bei Bedarf mit einer entsprechenden Fehlermeldung kommentiert. Alle Aktionen werden bei Bedarf für eine spätere Überprüfung mit geloggt. Komplexe Formulare zu erzeugen, wird mit diesem Modul auf angenehme Weise erleichtert.
Beispiel WWW::FormHTML-Formulare zu erzeugen, ist einfach, die Überprüfung von Usereingaben und das Validieren der übergebenen Werte könnten sich in manchen Fällen als aufwändig erweisen. Mit
WWW::Form werden diese Aufgaben aber komfortabel gelöst. Das im Folgenden dokumentierte Beispiel zeigt eine typische Anwendung dazu.
#!/usr/bin/perl
use strict;
use CGI;
use WWW::Form;
# Internes Modul von WWW::Form zur Validierung von Eingaben
use WWW::FieldValidator;
# Definitin von Konstanten für die verwendeten Formularfelder
use constant EMAIL_FIELD_NAME => 'emailAddress';
use constant PASSWORD_FIELD_NAME => 'password';
my $q = CGI->new();
my $params = $q->Vars() || {};
my $form = WWW::Form->new(
get_form_fields(),
$params,
[&EMAIL_FIELD_NAME, &PASSWORD_FIELD_NAME]
);
# Prüfen, ob das Formular verschickt wurde.
if ($form->is_submitted($ENV{REQUEST_METHOD})) {
# Formulardaten validieren
$form->validate_fields();
# Die Dateneingaben waren OK
if ($form->is_valid()) {
# Daten wie gewünscht weiter verarbeiten.
}
}
# HTML-Seite ausgeben
print <<HTML;
Content-Type: text/html
<html>
<head>
<title>A Simple HTML Form</title>
</head>
<body>
HTML
# Formular ausgeben
print $form->get_form_HTML(action => './formular_test.pl');
print <<HTML;
</body>
</html>
HTML
# Hier wird das Formular erzeugt und mit Regeln versehen.
sub get_form_fields {
my %fields = (
&EMAIL_FIELD_NAME => {
label => 'Email address',
defaultValue => 'you@emailaddress.com',
type => 'text',
validators => [WWW::FieldValidator->new(
WWW::FieldValidator::WELL_FORMED_EMAIL,
'Make sure email address is well formed'
)]
},
&PASSWORD_FIELD_NAME => {
label => 'Password',
defaultValue => '',
type => 'password',
validators => [WWW::FieldValidator->new(
WWW::FieldValidator::MIN_STR_LENGTH,
'Password must be at least 6 characters',
6
)]
}
);
return \%fields;
}
Weitere Details zu den vorhanden Methoden der Validierung finden Sie in der Dokumentation von
WWW::FieldValidator.
load
Mit Hilfe von
load [4] können Sie das Laden und Ausführen von Modulen optimieren und somit Ihren Arbeitsspeicher schonen und damit die CPU-Geschwindigkeit erhöhen. Dazu bietet diese Anwendung etliche Methoden. So können Sie beispielsweise bestimmen, ein Modul nur dann zu laden, wenn dieses für eine Routine benötigt wird. Typischerweise wir ein eingebundenes Modul bereits zum Start eines Skripts geladen, es sei denn, Sie bringen es direkt in einer Subroutine oder einem bestimmten Block unter. Für systemlastige Anwendungen sollten Sie dieses Modul auf jeden Fall ausprobieren.
RTF::Writer
Wie der Name schon andeutet, erzeugt
RTF::Writer [5] Dokumente im Rich Text-Format. Zur Anwendung erzeugen Sie eine Objektinstanz, über die sämtliche Formatierungsanweisungen und Inhalte eingebunden werden. Das Erzeugen von Absätzen, Tabellen und das Ausrichten von Textblöcken gestaltet sich dank der durchdachten Syntax recht einfach. Natürlich können Sie auch Bilder einbinden, welche als eigener Block oder im Fließtext ausgeben werden. Für die Arbeit mit Grafiken sind etliche Methoden verfügbar, über die Sie beispielsweise die Breite und Höhe und/oder einen Rahmenabstand bestimmen können.
Text::DeSupercite
Für die Beantwortung von Mailtexten werden Zitate üblicherweise über ein bestimmtes Zeichen als Block formatiert. Üblicherweise ist dies das Zeichen >. Manche Mailprogramme oder Autoren verwenden aber eigene Formatierungen oder mehrfache Auszeichnungen. Für das automatische Verarbeiten von Mailtexten wäre aber eine einheitliche Darstellung sinnvoll. Hier hilft
Text::DeSupercite [6], indem es einen Text nach Zitaten untersucht und diese falls notwendig in die einfache Form überführt (z.B. >>> oder | nach >).
CGI::Untaint::ipaddress
Das Modul
CGI::Untaint::ipaddress [7] überprüft eine IP-Adresse auf Ihre lexikalische Gültigkeit. Beachten Sie, dass hierbei nur die Schreibweise und nicht die Verfügbarkeit einer IP-Adresse überprüft wird. Ein Blick in den Quellcode des Moduls zeigt einen interessanten Regulären Ausdruck für diese Aufgabe.
Acme::Dot
Auch diesmal gibt es neue Module aus der glorreichen Acme-Reihe auf CPAN.
Acme::Dot [8] ermöglicht die Anwendung der Punktnotation für den Aufruf von Objekteigenschaften oder Methoden, wie es in objektorientierten Sprachen üblich ist.
Net::FTPServer
Net::FTPServer [9] ist ein - laut Autor - sicherer, umfangreicher und optimal konfigurierbarer FTP-Server, der komplett in Perl geschrieben wurde. Bei der Programmierung wurde besonderer Wert auf die vollständige Umsetzung der aktuellen RFCs gelegt. Der FTP-Server kann über
INETD und
XINETD als Dienst oder als eigenständiger Server gestartet werden. Von anonymen und gesicherten Anmeldungen bis hin zur Unterstützung von virtuellen Hosts wird alles geboten, um für alle Aufgaben im täglichen Einsatz bestens gerüstet zu sein.
DBI::Shell
DBI::Shell [10] bietet Ihnen eine Shell für den Zugriff auf das Perl-DBI-Modul. Sie können damit Ihre Datenbankanwendungen testen, manipulieren oder erweitern und dies auf ähnliche Weise, wie es die Kommandozeile von MySQL erlaubt. Dazu stehen Ihnen zahlreiche Methoden zur Verfügung. Die derzeitige Version ist noch in einem frühen Stadium, weshalb die Dokumentation noch nicht sehr ausführlich ist. Die Möglichkeiten sind aber dennoch sehr mächtig. Ein Blick auf dieses Modul lohnt auf jeden Fall.
Music::Image::Chord
Sind Sie Musiker und evtl. auch noch Gitarrist? Falls ja, dann hilft Ihnen
Music::Image::Chord [11] dabei, Ihre Kompositionen über eine Grafik als Griffakkorde darzustellen. Das Ergebnis Ihrer Eingaben wird dabei als PNG-Grafik angezeigt bzw. als Grafikdatei erzeugt.
Games::Tetris
Sie wollten immer schon einen Tetris-Klon programmieren anstatt nur zu spielen? Mit Hilfe von
Games::Tetris [12] erhalten Sie die notwendigen Routinen, um dieses Vorhaben ohne allzu großen Aufwand umzusetzen. Die dazu vorhandenen Routinen erzeugen neue Steine gemäß Ihren Vorgaben, kontrollieren die Flugbahn, testen ob ein Stein in eine Lücke passt und prüfen, ob eine Reihe gelöscht werden kann. Sie müssen eigentlich nur noch den Rahmen für Ihr Spiel programmieren. Der Autor arbeitet zudem an einer Schnittstelle zu TK/QT/Wx, um eine grafische Oberfläche für das Spiel zu ermöglichen.
Johannes Gamperl ist freier Journalist und selbstständiger Programmierer. Im Internet ist er unter seiner Firmenseite www.jg-webdesign.de/, seinem Weblog www.jg-privat.de/ oder seinem Portal für Webentwickler www.devshare.de/ zu erreichen.Links