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.
Math::Symbolic
Um einfache mathematische Berechnungen auszuführen, reichen für die meisten Fälle die Bordmittel von Perl aus. Will man hingegen komplexe Formeln oder Berechnungen durchführen, stößt man schnell an die vorgegebenen Grenzen.
Math::Symbolic [1] ermöglicht es Ihnen, umfangreiche Berechnungen ohne Zuhilfenahme kommerzieller Anwendungen darzustellen. Ausdrücke wie
1/2 * m * v^2 können beispielsweise als String dem Modul übergeben werden. Als Rückgabewert erhalten Sie anschließend das berechnete Ergebnis. Eigene Methoden können auf einfache Weise als Erweiterung über eine neue Klasse dem Modul hinzugefügt werden.
Acme::PGPSign
Acme::PGPSign [2] verschlüsselt Ihre Anwendungen, wie der Name bereits verrät, als PGP-Signatur. Dazu wandelt das Modul beim ersten Aufruf des Skripts den kompletten Quellcode in das PGP-Format um. Über einen Schlüssel beim Objektaufruf kann die Anwendung nun weiter wie gewohnt ausgeführt werden. Betrachter des Quellcodes sehen aber nur die PGP-Signatur, weshalb sich dieses Modul bestens dazu eignet, den Quellcode vor neugierigen Blicken zu schützen. Dies allerdings nur für den ersten Moment, da man die Signatur auch ohne weiteres in den Klartext zurück verwandeln kann.
Acme::Voodoo
Sind Sie manchmal von Ihren Programmen genervt? Für diesen Fall kann
Acme::Voodoo [3] weiter helfen. Verhexen Sie damit Ihre Programme und belegen Sie Routinen mit virtuellen Flüchen. Das Modul fungiert als virtuelle Voodoo-Puppe, in die Sie Ihre Nadeln hinein treiben und bestimmte Aktionen herbeiführen können. Die Methode
zombie() sorgt zum Beispiel dafür, dass das Programm bei einem nächsten Methodenaufruf für eine bestimmte Zeit einschläft, das heißt nicht reagiert und somit das System blockiert. Mit
kill() beenden Sie Ihr Programm auf gewaltsame Weise. Ein Modul für Charaktere mit starken Nerven ;o).
Text::vCard
Text::vCard [4] ermöglicht es, so genannte vCards nach RFC 2426 anzulegen und zu bearbeiten. Über einfach anzuwendende Methoden erzeugen Sie ohne großen Aufwand eigene vCards. Das Modul eignet sich daher bestens für Anwendungen mit Adressbüchern. Abgelegte vCards können eingelesen und ausgewertet werden. Dieses Modul kann beispielsweise zum Extrahieren aller eMail- und Web-Adressen aus einer Sammlung von vCards zur weiteren Verarbeitung angewandt werden.
Text::GenderFromName
Dieses Modul könnte als Anregung für die Programmierung eines deutschen Pendants dienen.
Text::GenderFromName [5] ermittelt das Geschlecht zu einem Vornamen. Dazu greift es auf eine Liste von jeweils über 1.000 weiblichen und männlichen Vornamen aus dem englischen Sprachraum zurück. Als Ergebnis der Prüfung erhalten Sie einen String mit dem Wert
m oder
f (für male bzw. female). Sinnvoll angewandt kann damit beispielsweise die Anrede in Formularen automatisch selektiert und/oder die geeignete Anrede für eMails selbstständig ausgewählt werden.
Beispiel Text::GenderFromNameDas Modul
Text::GenderFromName bietet dem Anwender zahlreiche Möglichkeiten, um Vornamen nach dem Geschlecht zu prüfen. Im folgenden kurzen Beispiel sehen Sie eine typische Anwendung sowie die mögliche Auswirkung der Detailtiefe einer Überprüfung.
use Text::GenderFromName;
my @names = ('Josephine', 'Michael', 'Dondi', 'Jonny',
'Pascal', 'Velvet', 'Eamon', 'FLKMLKSJN');
for (@names) {
# Use strict matching
my $gender = &gender($_) || '';
if ($gender eq 'f') { print "$_: Female\n" }
elsif ($gender eq 'm') { print "$_: Male\n" }
else { print "$_: UNSURE\n" }
}
Als Ergebnis dieser Abfrage erhalten Sie die folgende Ausgabe:
Josephine: Female
Michael: UNSURE
Dondi: UNSURE
Jonny: UNSURE
Pascal: UNSURE
Velvet: UNSURE
Eamon: UNSURE
FLKMLKSJN: UNSURE
Wie Sie erkennen können, ist das Ergebnis nicht sehr aussagekräftig. Dies liegt daran, dass wir für die Methode
gender() eine strenge Suche angestoßen haben. Über den zweiten Parameter können Sie hierbei eine fehlertolerantere Suche anstoßen (Details dazu werden in der Dokumentation zum Modul beschrieben).
for (@names) {
# Use loose matching
my $gender = &gender($_, 9) || '';
Dieses Codefragment bewirkt bei gleichen Ausgangsdaten wie im Beispiel zuvor, die folgende Ausgabe:
Josephine: Female
Michael: Male
Dondi: Male
Jonny: Male
Pascal: Male
Velvet: Female
Eamon: UNSURE
FLKMLKSJN: UNSURE
DBIx::Table::Dup
DBIx::Table::Dup [6] schafft auf einfache Weise ein genaues Abbild einer gegebenen Datenbank-Tabelle. Um dies zu erreichen, müssten Sie üblicherweise zunächst die Tabellenstruktur ermitteln, anschließend eine neue Tabelle mit gleicher Struktur anlegen und zu guter Letzt die Daten der ursprünglichen Tabelle in die neue einfügen. Dieses Modul erledigt all diese Aufgaben per einfachem Methodenaufruf und ist daher auch bestens für ein einfaches und schnelles skriptgestütztes Backup von Tabellen einer Datenbank geeignet.
CGI::Alert
Mit
CGI::Alert [7] werden Sie über Fehler und Warnungen bei der Ausführung eines CGI-Skripts per eMail informiert. Dabei erhalten Sie eine Nachricht mit allen wichtigen Details, um mögliche Fehler einzugrenzen und anschließend zu beheben. Dem Anwender wird eine spezielle Fehlerseite angezeigt, welche individuell gestaltet werden kann. Mit etwas Aufwand können Sie dieses Modul beispielsweise auch so anpassen, dass Fehlermeldungen in eine Datenbank auflaufen, anstatt eine eMail zu versenden.
Apache::BruteWatch
Attacken auf Webserver erfreuen sich ständig wachsender Beliebtheit. Darunter zählen auch so genannte Bruteforce-Attacken, welche es als Ziel haben, Passwörter auszuspionieren. Das Modul
Apache::BruteWatch [8] überwacht Ihren Webserver auf solche Angriffe innerhalb Ihrer Webanwendungen und protokolliert diese in einer Datenbank mit. Bei einem Angriff wird der Seitenbetreiber per eMail benachrichtig, damit er entsprechende Maßnahmen einleiten kann. Um dieses Modul in Ihrer Serverumgebung einzusetzen, müssen Sie die
httpd.conf von Apache mit entsprechenden Direktiven erweitern. In der Konfiguration können Sie auch die Anzahl der möglichen fehlerhaften Eingaben von Passwörtern festlegen.
Game::3D
Game::3D [9] wurde für die Programmierung von 3D-Spielen mit Perl entwickelt. Das Modul bietet eine große Anzahl von Objekten, die für eigene Spiele verwendet werden können. Sie können damit Punkte und Objekte mit einer ID versehen und diesen bestimmte Zustände (an, aus etc.) zuweisen. Alle Objekte können Signale senden oder erhalten, um beispielsweise auf Kollisionen zu reagieren. Soundeffekte und Beleuchtung via Kameraführung sind ebenfalls möglich. Auf der Homepage [10] des Autors erhalten Sie ausführliche Informationen zur Anwendung und ein sehr interessantes Beispiel.
WWW::UsePerl::Journal::Thread
Mit
WWW::UsePerl::Journal::Thread [11] können Sie Informationen aus einem bestimmten Beitrag von use.perl.org/ extrahieren. Über den Methodenaufruf erhalten Sie dabei die Inhalte eines Beitrags aufgeteilt nach Betreff, Autor, Inhalt, Datum und Bewertung des Beitrags. Die so gewonnenen Informationen könnten Sie nun für Ihr eigenes Newsportal nutzen oder beispielsweise zu einem RSS-Feed umwandeln.
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. Links