Homepage-Webhilfe Event-Banner

Einführung

Perl-Logo Perl ist eine freie und plattformunabhängige Skriptsprache, die dazu genutzt werden kann, dynamische Webseiten zu erstellen. Hierfür kommuniziert der Webserver mittels der CGI-Schnittstelle mit dem Perl-Interpreter.

Perl wurde 1987 von Larry Wall entworfen. Die Sprache war ursprünglich zur Manipulation von Textdateien sowie zur Steuerung von anderen Programmen gedacht. Mit der Entstehung und Entwicklung des World Wide Webs wurde Perl verstärkt auf Webservern eingesetzt, um somit Webseiten dynamisch erzeugen zu können. Dabei war es Perl schon damals möglich, auch mit anderen Ressourcen wie Dateien und Datenbanken zu arbeiten. Auch wenn PHP in der Zwischenzeit als eindeutiger Marktführer für serverseitige Webanwendungen identifizierbar ist, werden auf vielen Webservern noch immer Perl-Skripte eingesetzt.

Vom Syntax ist Perl an die menschliche Sprache angelehnt, weshalb die Sprache auch als einfach erlernbar gilt. In diesem Thema wollen wir uns jedoch nicht mit den Grundlagen der Sprache Perl, sondern vielmehr mit dem CGI-Modul von Perl beschäftigen, um Ihnen die Erzeugung von dynamischen Webseiten sowie das Verarbeiten von übergebenen URL-Parametern und Formulardaten näher zu bringen. Für einen Schnelleinstieg in Perl können Sie unseren Crashkurs besuchen.


Um Perl-Skripte auszuführen, wird auf dem Webserver in erster Linie ein Perl-Interpreter benötigt. Dieser kann auf der Perl-Website heruntergeladen werden. In den meisten Hosting-Angeboten ist ein Perl-Interpreter bereits vom Provider vorinstalliert (da kein Root-Zugriff auf den Server durch den Kunden vorhanden ist), welcher direkt genutzt werden kann. In dem Software-Paket XAMPP, welches unter Webentwicklern sehr beliebt ist, ist Perl bereits enthalten.

CGI-Erklärung Bevor wir uns nun das erste Perl-Skript anschauen, wollen wir uns mit der Funktionsweise der CGI-Schnittstelle beschäftigen: Bei CGI (Common Gateway Interface) handelt es sich um eine Schnittstelle, die zum Austausch von Daten zwischen Webserver und anderen Programmen (in diesem Fall der Perl-Interpreter) verwendet wird. Dabei stellt der Webserver eine sogenannte Laufzeitumgebung zur Verfügung, in welcher das Programm ausgeführt wird und neben Umgebungsvariablen und Ein- und Ausgabedatenströme (stdin und stdout) zur Verfügung gestellt werden. Die Umgebungsvariablen enthalten Informationen zum Server, zum Skript, zum Anfrager, zur Anfrage und zur HTTP-Verbindung. Die Ein- und Ausgabedatenströme dienen dazu, die URL-Parameter und Formulardaten vom Browser zur CGI-Applikation und die Ausgaben von der CGI-Applikation zurück zum Browser zu transportieren. In dem Bild auf der rechten Seite sehen Sie, wie die Anfrage einer Seite von einem Webserver aussieht.


Nun wollen wir uns dem ersten Perl-Skript widmen. An sich enthält die Datei nichts Besonderes: die Shebang-Zeile, welche den Pfad zum Perl-Interpreter enthält, die use strict;-Anweisung und eine Ausgabe im Heredoc-Stil. Bei der Ausgabe wird das HTTP-Headerfeld Content-Type und das HTML-Dokument ausgegeben. Es gilt dabei, die Leerzeile zwischen HTTP-Header und dem Inhalt zu beachten, welche nicht fehlen darf. Natürlich kann die Ausgabe auch mit einzelnen print-Befehlen erfolgen. Der folgende Code, oder generell ein Perl-Skript, wird zumeist in einer Datei mit der Endung .pl oder .cgi gespeichert.

#!/usr/bin/perl -w

use strict;

print <<END;
Content-Type: text/html;charset=UTF-8

<!Doctype html>
<html>
    <head>
        <title>Erstes Skript - Perl Code-Beispiel</title>
        
        <meta charset="utf-8" />
        
        <meta name="robots" content="noindex,nofollow" />
        <meta name="publisher" content="Homepage-Webhilfe" />
    </head>
    
    <body>
        <h1>Hallo Welt</h1>
        <p>Dies ist das erste Perl-Skript! Abgesehen von der Ausgabe enthält dieses Skript keinen Code.</p>
    </body>
</html>
END
Vorschau

Wichtig: Auf einigen Webservern bzw. bei einigen Providern können bzw. dürfen CGI-Skripte nur innerhalb des Ordners /cgi-bin/ ausgeführt werden. Dies kann auf einem Apache-Webserver mittels der Option ExecCGI geändert werden. Einige Provider lassen das Setzen dieser Option aber u. U. nicht zu.

Bei Verwendung von XAMPP muss zudem die Shebang-Zeile angepasst werden: #!C:\xampp\perl\bin\perl -w (bei einer Standardinstallation). Die Option -w bewirkt, wie Ihnen vermutlich bekannt ist, die Ausgabe von Warnungen.

Im Gegensatz zu PHP können in Perl Skript-Blöcke nicht im HTML-Code eingebettet werden. Perl wird also nicht dazu verwendet, einen Teil einer HTML-Seite dynamisch zu erzeugen, sondern erzeugt immer die komplette Ausgabedatei. Hierfür kann natürlich statischer HTML-Code einfach mittels eines print-Befehls ausgegeben werden. Das obige Beispiel enthält keine dynamischen Bestandteile, sondern lediglich einen statischen HTML-Code, welcher mittels des print-Befehls ausgegeben wird. Perl muss jedoch neben dem HTML-Code auch noch einen Teil des HTTP-Headers ausgeben. Dieser kann gegebenenfalls leer sein, jedoch muss zwischen Header und HTML-Code immer eine Leerzeile vorhanden sein. In dem Fall, dass kein Header mitgeschickt werden soll, bedeutet dies also, dass eine leere Zeile vor dem HTML-Code notiert werden muss. Grundsätzlich ist es jedoch zu empfehlen, die Content-Type-Eigenschaft mitzusenden (wie auch im Beispiel oben).

In den nächsten Beispielen (ausgenommen die vom Thema Umgebungsinformationen) werden wir uns mit dem CGI-Modul von Perl beschäftigen. Dieses wird mit use CGI; eingebunden. Anschließend muss noch ein CGI-Objekt instanziiert werden. Aus der daraus entstandenen Instanz werden wir später unsere Funktionen aufrufen.

use CGI;

my $cgi = new CGI();

Enthält Ihr Perl-Skript einen Fehler, so teilt der Perl-Interpreter dies an den Webserver mit, welcher darauf eine Seite zur Anzeige eines 500 Internal Server Errors an den Browser schickt bzw. auf ein dazugehöriges ErrorDocument weiterleitet. Ein solches Verhalten ist gerade für Entwicklungszwecke nicht sehr hilfreich, deshalb empfiehlt es sich, die Funktion fatalsToBrowser() aus dem Untermodul Carp des CGI-Moduls zu importieren. Dadurch werden detaillierte Fehlermeldungen (mit Zeilenangaben) an den Browser geschickt. Nachdem Sie die Entwicklung eines Skripts abgeschlossen haben, sollten Sie die Importierungs-Anweisung wieder entfernen, da wenn Ihr Skript doch noch einen Fehler enthalten sollte, u. U. sensible Informationen ausgegeben werden, die einen Besucher nichts angehen. Der Import von fatalsToBrowser() sieht wie folgt aus:

use CGI::Carp qw(fatalsToBrowser);

Übrigens: Alle unsere Perl-Beispiele enthalten die Anweisung use strict;, um „unsichere Konstrukte“ nicht zuzulassen.

Um unsere Webseite für Sie optimal zu gestalten und fortlaufend verbessern zu können, verwenden wir Cookies. Durch die weitere Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu. Weitere Informationen OK