Viele Leute schrecken vor den praktischen Perl5-Modulen zurück, weil diese mit Objekten zu tun haben. Und das ist ja schon mal verdächtig und tönt nach etwelchen Schwierigkeiten ohne entsprechend nützlich zu sein.
Auf der anderen Seite führen gewisse Probleme automatisch
hin zu Objekten. Das macht den Leuten Angst. Unnötigerweise.
Es ist ein riesiger Unterschied genügend über OO-Programmierung
zu wissen, um Module zu verwenden , oder um Module selber entwerfen
und implementieren zu können. Man befürchtet das letztere
können zu müssen um Zugang zum ersteren zu erhalten. Das
ist weit weg von der Realität.
Man muss nicht viel wissen um Module verwenden zu können.
Man lädt einfach die Library und ruft die dokumentierten "Konstruktoren"
auf. "Konstruktoren" sind die Dinge, welche neue Objekte
erzeugen. Häufig werden sie new genannt.
In Perl5 werden ein oder zwei neue Konzepte verwendet, welche Sie
vielleicht bisher noch nie gesehen haben:
Die Anweisung use Module lädt ein Modul mit dem Namen Module.pm
(zur Kompilationszeit) und fügt die exportierten Namen in Ihren
Namensraum ein. Die Anweisung require Module lädt das Modul
ebenfalls, aber erst zur Laufzeit und importiert keine Namen.
Der Pfeil-Operator für die Dereferenzierung -> bedeutet
ein Aufruf einer Methode (Subroutine) eines Objektes. In OO-Slang
sagt man auch ‘dem Objekt eine Message senden’. Dabei braucht man
keinerlei Kenntnisse über den Aufbau des Objektes. Es ist einfach
eine Black Box, welche Subroutinen zur Verfügung stellt. Das
ist alles.
Die folgenden zwei Zeilen sind aequivalent. Die zweite Zeile ist
jedoch syntaktisch ein wenig klarer:
$obj = new CGI;
$obj = CGI->new();
Wie jeder andere Unterprogrammaufruf, kann eine Methode irgend etwas
zurückgeben, sogar ein anderes Objekt.
use LWP::UserAgent;
$ua = new LWP::UserAgent;
$ua->agent("Mozilla/5.0PlatinumB3"); # hee :-)
$req = new HTTP::Request GET =>
'http://perl.com/perl/';
$req->header('Accept' => 'text/html');
# send request
$result = $ua->request($req);
# check the outcome
if ($result->is_success)
print $result->content;
else
print "Error: " . $result->code
. " " . $result->message;
Das wär’s. Das ist alles. Mehr braucht man nicht um Module
in Perl zu verwenden.
Hier sind noch ein paar Beispiele für den Gebrauch von perl
WWW-Modulen:
use CGI;
$req = CGI->new();
use CGI::Imagemap;
$map = CGI::Imagemap->new();
use HTML::Parse;
$html = parse_htmlfile("test.html");
use URI::URL;
$url = URI::URL->new('gisle.gif','http://www.com/%7Euser');
use HTTP::Request;
$hreq = HTTP::Request->new('GET', 'http://www.perl.com/');
Ich glaube nicht, dass man ein Smalltalk- oder C++-Superguru sein
muss, um mit diesen Dingen umzugehen.