Seiten-Inhalt

Programmieren mit Perl-Modulen

Module für Perl unter Windows

Zusätzliche Module installieren

...lange habe ich danach gesucht - aber dann ging alles ganz einfach (Perl-Installation von ActiveState (s.o.)):

Erstmal nur in Kürze: benutze PPM (ein von der Kommandozeile aufrufbares Programm (Perl-Script), welches eine sehr einfache Installation der benötigten Module erlaubt)

  • "search" - listet alle verfügbaren Pakete auf - und dies sind sehr viele
  • "install <Modul>" - installiert entsprechendes Modul

So war es dann auf einmal auch kein Problem mehr GD und/oder mySQL Module zu installieren - sogar die ActiveState-HTML-Hilfe-Dateien wurden erweitert.

Wer weiß, daß es ein bestimmtes Modul gibt - dies aber mit der Suche von ppm nicht finden kann, dem ist vielleicht hier geholfen?!


Interessante und nützliche Perl-Module

... die man leider noch extra installieren muss, da sie in der Standard-Installation nicht direkt dabei sind. Mit dem unter Windows mitinstallierten Tool PPM ist es aber kein Problem, Module nachzurüsten (s.o.).

Modul
inst.
Kurzbeschreibung
Archive::Zip x Unterstützung von ZIP-Dateien (Datei-Kompression) mit Perl. Man sich kann mit einigen ziemlich einfachen Befehlen ZIP-Archive erstellen lassen: $zip-Handle öffen, Dateien hinzufügen, Archiv speichern unter... fertig.
Ich habe mir für mein System ein Backup-Tool geschrieben: Spezifizierte Verzeichnisse (und deren Unterverzeichnisse) werden in ein angegebenes Verzeichnis gespiegelt. Dabei werden im jeweiligen Verzeichnis enthaltene Dateien als ZIP-Datei gesichert. Dieses gespiegelte Verzeichnis brauche ich dann nun noch auf eine Sicherungs-CD zu brennen...
Image   liest Informationen wie Bildgrösse etc. zu diversen Bildformaten (u.a. GIF, JPG, PNG, TIF, ...)
MP3-Info   Interpretiert die ID3-Tags von MP3-Dateien
GD   erzeugt Grafik-Dateien (hilfreich für Web-Counter)
Net::LDAP   Authentifizierung und/oder Adressverzeichnisse und/oder andere Dinge kann man hiermit über einen zentralen Server abrufen.
Zur Suche/Installation dieser Module suche bzw. installiere man 'perl-ldap' (s. ppm.bat)!!
strict x Sollte auf JEDEN FALL in jedem Script und jedem Modul eingebunden werden, um immer alle Warnungen anzeigen zu lassen. Die teilweise pingelig erscheinenden Warnungen hindern aber daran, unsicheren Code zu verfassen, was bei sich größeren Projekten schnell sehr negativ auswirken kann.
(Hierbei handelt es sich eigentlich um ein sog. Pragma - es wird aber i.a. ähnlich behandelt und eingebunden, daher auch hier aufgezählt.)
LWP::UserAgent x

Ermöglicht den vereinfachten Zugriff über das HTTP-Protokoll auf Internet-Inhalte. Ich habe mir mittlerweile ein eigenes Modul geschrieben, daß dieses Modul nutzt und nun einfach per

my $html = Get_HTML (url => 'http://bei-priess.de/computer/bla.txt',
                     agent => 'Mozilla',
                     save  => 'lokale_kopie.htm',
                    );

HTML-Seiten abruft.

DBI   Datenbank Interface für Perl
DBD-ODBC   ODBC-Treiber für DBI - ermöglicht den Zugriff mit DBI-Funktionalität auf ODBC-Datenbanken
DBD-mySQL   mySQL-"Treiber" für DBI - ermöglicht den Zugriff auf mySQL-Datenbanken
(Dieses Modul wird nicht explizit in den Scripten eingebunden. Es wird von DBI benutzt, um auf MySQL-Datenbanken zuzugreifen.)
Achtung ggf. muss man für die Installation ein weiteres Repository in PPM einrichten: http://theoryx5.uwinnipeg.ca/ppms/package.ppd
Getopt::Long x Stellt u.a. die Funktion 'GetOptions' zur Verfügung, die die vereifachte Angabe von Parametern an Perl-Scripte erlaubt. Dabei wird die Unix/Linux-übliche Aufrufkonvention unterstützt.
CGI x Unterstützung für die CGI-Programmierung (Formularauswertung in HTML-Seiten, Erstellung von HTML-Seiten,...)
CGI-WML   Dieses Modul hilft bei der Erstellung von WAP-Seiten mit Perl.
(Meine WAP-Seiten wurden auch mit Hilfe dieses Modules erstellt. (Die Seiten können mit dem Browser Opera direkt betrachtet werden - andere Browser erfordern Online-Emulationen, z.B. von Yahoo))
Mail::Sender   Einfache Versendung von Mails (auch unter Windows) - auch einfaches Anhängen von Attachments möglich
Win32::ODBC x Datenbank-Zugriff auf das Windows ODBC-Datenbanksystem
XML::Simple   Interpetiert XML-Dateien und "schreibt" diese in eine verschachtelte Datenstruktur aus Hashes und (anonymen) Arrays, so dass dann ein sehr komfortabler Zugriff möglich ist (mit der Funktion 'XMLin' - 'XMLout' gibt dann einen String zurück, der in eine XML-Datei geschrieben werden kann).
SOAP::Lite x Unterstützung des Zugriffs mit SOAP. Durch den Austausch von XML-Datenstrukturen kann man so z.B. bei Google Suchanfragen erstellen und die Ergebnisse auswerten, ohne mit Regulären Ausdrücken arbeiten zu müssen, die ggf. bei einer Umstellung von Google nicht mehr richtig arbeiten. Leider stellen noch viel zu wenig Anbieter diesen Service zur Verfügung...
(Achtung: ggf. mit 'verify --upgrade SOAP-Lite' im PPM auf neueste Version (mindestens 0.52) upgraden!)
XML::Sablotron  

Toolkit für die Verarbeitung von XML - mit Hilfe von XSLT. Nun ist es möglich, für eine XML-"Daten"-Datei mit XSLT verschiedene Betrachtungsweisen (Ausgabeformen; z.B. HTML, HTML-Druckversion, PDF etc) zu definieren.

(Zur Installation: Da die erforderlichen Dateien nicht auf den Standard-Servern für PPM liegen, muss man einen weiteren Server hinzulinken und kann dann die Module installieren:

PPM> repository add http://ppm.gingerall.cz
PPM> install XML-Sablotron

)

[inst. = mit 'x' markiert, wenn dieses Modul in der Standardinstallation vorhanden ist. Sonst kann es z.B. über PPM nachinstalliert werden.]


PPM - und Module nicht von ActiveState

Als ich vor einiger Zeit mein System auf Perl 5.8.0 umstellte gab es ein Problem: Einige Module werden von ActiveState noch nicht für die Verwendung der neuen Version angeboten. Also habe ich geguckt, ob ich unter Windows "mal fix" die benötigten Module selber compilieren könnte. Es stellte sich heraus, daß (zumindest bei dem Modul GD) es für mich zu viel Aufwand bedeuten würde - und nicht sicher sei, daß die vermutlich stundenlange Arbeit von Erfolg gekrönt sein würde. Ich resignierte - und fand dann aber doch noch einen Beitrag in den Google-Groups, der eine Anleitung gab, dieses Problem zu umgehen.

PPM bitet auch die Möglichkeit, auf andere Repositories (hier in dem Sinne von Modul-Sammlungen) zuzugreifen. Wenn nun von einer anderen Quelle dieses Modul zu finden ist. Weitere Suche brachte mich zu "winnipeg" - diese Quelle stellt auch eine Version von GD zur Verfügung, die mit dem neuen Perl 5.8.0 arbeitet.

Hier die dazu ntwendigen Befehle (und deren Bedeutung), die ich dafür ausführen mußte, um GD mit Perl 5.8.0 unter Windows zu installieren:

ppm> repository zeigt die derzeit aktuell berücksichtigten Repositories an. Voreingestellt sind hier:
[1] ActiveState PPM2 Repository
[2] ActiveState Package Repository
ppm> s GD die Suche nach GD - für die o.g. Repositories leider erfolglos
ppm> rep add "winnipeg"
http://theoryx5.uwinnipeg.ca/cgi-bin/ppmserver?urn:/PPMServer58

füge eine weitere Quelle hinzu
(Zeilenumbrüche löschen!!)

ppm> repository wiederhole die Anzeige der bei der Suche zu berücksichtigenden Repositories
s GD die Suche nach GD - jetzt erfolgreich
install GD - wie immer - nun kann man einfach das gewünschte Modul installieren.

Perl und XML

Da man in Perl Konfigurationsdateinen sehr schön mit XML-Dateien realisieren kann, habe ich mich auch mal mit XML ein wenig intensiver beschäftigt. Ich habe lange recherchieren müssen, um alle Dinge zu "erfahren", die ich meinte zu brauchen... damit es Ihnen vielleicht etwas leichter gemacht wird habe ich hier versucht, die wichtigsten Punkte zusammenzufassen.

Die Bearbeitung von XML-Dateien mit Perl-Scripten ist eine ziemlich einfache Sache: es gibt dafür das Modul XML::Simple. Dies stellt eine Funktion XMLin zur verfügung, welche die XML-Datei in eine verzweigte Array-/Hash-Tabelle verwandelt, auf die man in Perl dann relativ einfach zugreifen kann. Um vorzugeben, ob Ansammlungen von XML-Elementen zu einem Array zusammengefasst werden sollen oder lieber als Hash dargestellt werden gibt es diverse Optionen (forcearray etc.) - deren Bedeutung ist am besten in der Hilfe zu perl (perldoc oder der HTML-Hilfe (s.u.)) nachzulesen. Um die Daten ggf. später wieder zu schreiben, gibt es die Funktion XMLout: diese erzeugt ein Skalar, in dem die XML-Elemente aufgeführt sind. Indem man dieses Skalar in eine Datei schreibt, wird die XML-Datei wieder zurückgeschrieben.


SOAP - Google-Suche mit Google-APIs

Google stellt einen interessanten Service zur Verfügung. Man kann über die SOAP-Schnittstelle Anfragen an Google stellen und bekommt eine schicke Datenstruktur zurückgegeben, die man dann als ein komplexes Perl-Array-Hash-Referenzen-Gebilde weiterbe- und verarbeiten kann. So ist es nicht mehr erforderlich, die von der eigentlichen Google-Suchmaschine zurückgegebene HTML-Seite der Suchergebnisse via RegEx zu interpretieren (und bei Umformatierung von Google wieder neu anzufangen), sondern man greift einfach auf die Rückgabewerte zurück.

Auf der Site von Google http://www.google.com/apis/index.html kann man sich weitere Informationen holen - es gibt dort auch eine FAQ zu dem Service. Es ist erforderlich, sich einen Schlüssel von Google zuteilen zu lassen. Dieser wird via Mail zugesendet.

Nun muss man sich mit dem SOAP-Modul beschäftigen - eigentlich aber auch nicht, denn es folgt unten ein sehr kurzes - aber funktionierendes - Beispiel, wie eine solche Anfrage realisiert werden kann:

use strict;
use SOAP::Lite;

my $_key = require ('key.pl');
my $service = SOAP::Lite->service("http://api.google.com/GoogleSearch.wsdl")

my $response = $service->doGoogleSearch($_key, $q, 
                                        $start, $max, 
                                        $filter,
                                        $restrict,$safe,$lr,
                                        $ie,$oe);
if ($service->call->fault) { # Fehler?
    # caller will check this to see if there was an error
    $response->{'err'} = $service->call->faultstring;

    #... verarbeite Fehlermeldung
} else {
    print "$response\n";
} # if

Hier noch eine kurze Erklärung des Source: in der Datei "key.pl" steht in Anführungszeichen "geklammert der von Google vergebene Schlüssel. Dieser wird eingelesen. In der nächsten Zeile wird auf die wsdl-Datei vom Google-Server zugegriffen. Dem neuen Objekt $service werden damit weitere Funktionen "zugeteilt" - u.a. auch die Funktion doGoogleSearch. Ein Aufruf dieser Funktion mit dem Schlüssel, dem Suchstring, dem Startindex, der Anzahl der Suchergebnisse etc. liefert das zu interpretierende Ergebnis. Es gibt noch zwei weitere Funktionen, die die wsdl-Datei zur Verfügung stellt: doGetCachedPage und doSpellingSuggestion, die die von Google archivierte Seite zurückgeben bzw. einen auf die Google-Datenbank abgestimmten, verbesserten Suchbegriff, der evtl. Schreibfehler o.ä. enthalten könnte.

(Google hat aber leider auch einige Beschränkungen eingebaut - mit denen man aber durchaus gut leben kann. Die Anzahl der Anfragen pro Tag ist auf 1000 begrenzt und die Anzahl der Suchergebnisse ist je Anfrage auf 10 beschränkt. Damit kann man doch schon einiges anfangen... ;-))


Drucken
letzte Änderung: 08.Apr 2010

rechte Spalte

Felicitas-Fernsehservice

Ein E-Mail-Dienst, der Ihnen täglich eine Auswahl des TV-Programms zusendet, das anhand einer individuellen Suchwortliste erstellt wurde.
Klicken Sie hier.