Perl


Zur Vorbereitung meiner Abschlußprüfung, war ich gerade dabei, mich der Thematik AJAX zuzuwenden. Die Erstellung der notwendigen XML-Daten geschah im Unterricht in PHP. Warum auch nicht, das Prinzip soll in erster Linie erklärt werden und PHP-Code ist doch recht schnell zu erstellen.
Habe mich dann aber doch irgendwie in den Gedanken vertieft, mein XML mit Perl zu fabrizieren… Und es hat mich überrascht wie schnell es mir von der Hand ging ohne eine besonders große Einarbeitungszeit. Benutzt habe ich dazu das Modul XML::Writer.
Im nächsten Schritt habe ich versucht eine mehr oder wenig sinnige Aufgabenstellung im AJAX-Kontext umzusetzen: Alle 10 Sekunden erscheint auf einer Website an einer definierten Stelle ein neuer Banner. Die Bannerdaten sollten natürlich von meinem Perl-Skript in wohlgeformten XML geliefert werden. Das Resultat in Perl:


#!/usr/bin/perl
use strict;
use warnings;
# use DBI; # DB-Connectivity wäre hier wohl das eigentliche Einsatzgebiet
use XML::Writer;

my @banner = ("http://192.168.0.2/test/js1/banner/eins.jpg",
   "http://192.168.0.2/test/js1/banner/zwei.jpg",
   "http://192.168.0.2/test/js1/banner/drei.jpg");
my @url = ("http://www.heise.de", "http://www.golem.de", "http://blog.wilkening.info");

# Wir machen eine Browserausgabe also den
# Content-Type und vor allem den doppelten
# Zeilenumbruch nicht vergessen
print "Content-Type: text/xml\n\n";

my $output = "";

# XML geht in die Variable $output.
my $writer = new XML::Writer(OUTPUT => $output);
$writer->setDataIndent(3);

$writer->startTag('Banner');
# Abarbeiten des Array
for (my $i=0; $i< @banner;$i++)
{
   $writer->startTag(’EinBanner’, ID=>$i); # Attribute werden einfach “angehängt”
      $writer->startTag(’bild’);
      $writer->characters($banner[$i]);
      $writer->endTag(’bild’);
      $writer->startTag(’uri’);
      $writer->characters($url[$i]);
      $writer->endTag(’uri’);
   $writer->endTag(’EinBanner’);
}
$writer->endTag(’Banner’);

$writer->end();

Ich finde den Code wirklich simpel aber erkläre noch einmal kurz wichtige Dinge:

  1. use XML::Writer; -> Einbindung des Modul
  2. Die Arrays @banner und @url enthalten die eigentlichen Daten. So etwas kommt normalerweise meist aus einer DB…
  3. print “Content-Type: text/xml\n\n”; -> Auf den konnte ich bei meinen Versuchen nicht verzichten…
  4. my $writer = new XML::Writer(OUTPUT => $output); -> Instanz eines Objekt vom Typ XML:Writer
  5. $writer->startTag(’Banner’); -> Setzen eines Elements, eines Tags. Hier das Root-Element
  6. $writer->endTag(’Banner’); -> Schließen eines Knotens
  7. “Banner” ist das Root-Element. Dazwischen folgen die weiteren Knoten, die in der For-Schleife gebildet werden. Hierbei sollte man noch einmal ein Augenmerk darauf werfen, wie Attribute gebildet werden:
    $writer->startTag(’EinBanner’, ID=>$i); # Attribute werden einfach “angehängt”.
    Der Inhalt der Elemente wird mit $writer->characters($banner[$i]); geschrieben
  8. $writer->end(); -> FERTIG

Die Ausgabe der XML-Datei sieht wie folgt aus:

<Banner>
   <EinBanner ID="0">
      <bild>http://192.168.0.2/test/js1/banner/eins.jpg</bild>
      <uri>http://www.heise.de</uri>
   </EinBanner>
   <EinBanner ID="1">
      <bild>http://192.168.0.2/test/js1/banner/zwei.jpg</bild>
      <uri>http://www.golem.de</uri>
   </EinBanner>
   <EinBanner ID="2">
      <bild>http://192.168.0.2/test/js1/banner/drei.jpg</bild>
      <uri>http://blog.wilkening.info</uri>
   </EinBanner>
</Banner>

Nachdem ich durch externe Hilfe noch auf ein paar Fehler aufmerksam gemacht wurde, den Code mit “use strict” verbessert habe und nun auch noch die Punkte Unterprogramme und “Here-Document” mit aufgeführt habe, sollte “Perl in einer Stunde” soweit erst einmal fertig sein.

Download: “Perl in einer Stunde”

Wer den Namen Perl hört, denkt meist an kryptische Verbiegungen ohne Ende. Perl an sich, ist eigentlich nicht so kryptisch und sollte sich jedem, der eine Programmiersprache beherrscht, äußerst schnell erschließen. Für diese Klientel habe ich dieses kurze Tutorial geschrieben.

Die Perl-Programme wurden allesamt unter Linux getestet, müssten aber unter jedem Betriebssystem laufen, für das ein Perl-Interpreter bereitgestellt wird.

 

Download: Perl in einer Stunde

 

Ich bitte um Kommentare, Kritik!