cgicorner.ch

Informationen rund um Perl/CGI

Sie sind hier: Home > CGI Hilfe > Tutorial > Kapitel 2 - erstes Script

Tutorial - Kapitel 2: Das erste Script

Voraussetzungen für dieses Kapitel

  • Webserver mit Perl/CGI-Unterstützung
  • Grundlegendste HTML-Kenntnisse. An dieser Stelle verweise ich gerne auf SelfHTML

Das erste Script: hello world!

Als erstes schreiben wir unter Perl einmal das berühmte "hello world"-Script und wollen das einmal genauer analysieren: Erstellen Sie eine neue Datei hello.cgiAls erstes schreiben wir unter Perl einmal das berühmte "hello world"-Script und wollen das einmal genauer analysieren: Erstellen Sie eine neue Datei hello.cgi mit folgendem Inhalt und speichern Sie diese im cgi-bin Verzeichnis.

#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<html>\n";
print "<body>\n";
print "hello world!\n";
print "</body>\n";
print "</html>";

Auf dem Browser sollte nun der Text "hello world!" erscheinen.

Nun aber schön der Reihe nach:

Die erste Zeile definiert den Pfad, in dem sich der Perl-Interpreter befindet (in unserem Fall /usr/bin/perl. Unter UNIX (oder Windows mit XAMPP) muss dieser korrekt sein. Wie dieser genau lautet können Sie auf der Konsole mit which perl bestimmen. /usr/bin/perl ist auf den meisten UNIX-Systemen der Standard. Unter Solaris trifft man häufig /usr/local/bin/perl. Unter Windows mit dem Standalone-Apache gemäss dem ersten Kapitel spielt es keine Rolle, was da für ein Pfad angegeben wird, da wir Apache so konfiguriert haben, dass Windows anhand der Dateiendung (.cgi oder .pl) auf das Programm schliesst. Die Zeile muss aber ebenfalls zwingend vorhanden sein.

Auf der zweiten Zeile teilen wir dem Browser die Art unseres Dokuments mit. In unserem Fall "text/html", also ein simples HTML-Dokument. Dies machen wir mittels normalem print-Befehl, gefolgt von zwei Leerzeilen (\n). Im Normalfall wird dieser sog. MIME-Type anhand der Dateiendung zugewiesen. Da CGI-Scripte aber auch mal ein GIF, PDF, ZIP-Datei oder was auch immer zurückliefern, muss dies immer angegeben werden. Übrigens: nicht jeder Server benötigt diese Zeile nicht zwingend. Deshalb ist das einer der häufigsten Fehler, warum ein Script auf dem lokalen Webserver läuft und auf dem Webserver im Internet einen Fehler 500 meldet.

Ebenfalls sehen wir, dass wir in Perl - wie in vielen anderen Programmiersprachen auch - jeden Befehl mit einem Strichpunkt (;) abschliessen müssen. So ist es auch möglich, mehrere Befehle auf eine Zeile zu schreiben.

Auf den folgenden Zeilen erstellen wir dann den Inhalt des HTML-Dokuments. Jede Zeile beginnt mit print, was bedeutet, dass die Ausgabe an den STDOUT (Standard-Output, in unserem Fall das Browserfenster) geschickt wird. Innerhalb der Anführungszeichen steht dann der Text, \n ist nichts anderes als ein Zeilenumbruch (new-line).

Natürlich hätte man die Browserausgabe auch auf eine Zeile schreiben können (hello1.cgi):

#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<html><body>hello world!</body></html>";

Besonders bei etwas umfangreicheren Dokumenten wird dies jedoch schnell unübersichtlich. Eine weitere sehr elegante Möglichkeit sieht wie folgt aus (hello2.cgi):

#!/usr/bin/perl
print "Content-type: text/html\n\n";
print <<HTMLtext;
<html>
<body>
hello world!
</body>
</html>
HTMLtext
# Zeilenumbruch am Ende

Wollen wir auch diese Lösung noch etwas genauer anschauen. Es gibt hier einen Befehl print <<HTMLtext;, der nichts anderes bedeutet als dass ab jetzt alle Zeilen ausgegeben werden sollen, bis der Text "HTMLtext" folgt. Anstelle von "HTMLtext" kann auch ein beliebiger anderer Text verwendet werden, z.B. "Ausgabe". Es gibt jedoch einige wichtige Punkte zu beachten:

  • Der print-Befehl muss mit einem Strichpunkt abgeschlossen sein
  • Das End-Wort (HTMLtext) darf keine Leer- oder Sonderzeichen beinhalten.
  • Das End-Wort muss auf einer separaten Zeile stehen, ohne führende oder nachfolgende Leerzeichen!
  • Das End-Wort darf nie auf der letzten Zeile des Scripts stehen. Ggf. muss also noch eine Leerzeile angefügt werden.

Diese Lösung gefällt mir persönlich besonders gut, denn 1. muss nicht auf jeder Zeile ein print-Befehl kommen, 2. muss ich auch nicht jedes Anführungszeichen Backquoten (dazu im nächsten Abschnitt mehr), 3. wirkt es sehr übersichtlich und 4. ist es an PHP angelehnt.

Spezielle Zeichen

Wir haben in der Zwischenzeit ja bereits \n für einen Zeilenumbruch kennen gelernt (Übrigens: dies bezieht sich lediglich auf einen Zeilenumbruch im Quelltext des Browsers. Zeilenumbrüche im Browser müssen natürlich auch weiterhin mit den HTML-Tags <br /> bzw. <p> </p> gemacht werden.

Es gibt jedoch noch eine Reihe anderer Sonderzeichen:

\t Der Tabulator
\r Wagenrücklauf (mehr zum Theme Zeilenumbrüche finden Sie in meiner Knowledge-Base im Artikel "Informationen über Zeilenumbrüche"
\\ Ergibt einen Backslash (\), da dieser für Sonderzeichen benötigt wird.
\" Normales Anführungszeichen, innerhalb eines anderen Anführungszeichen. z.B.
print "In diesem Text hat es \"Anführungszeichen\", die backquoted werden müssen";
\$ $ bezeichnet eine Variable (mehr dazu im Kapitel 3) und muss deshalb backquoted werden.
\@ @ bezeichnet ein Array (mehr dazu im Kapitel 3) und muss deshalb backquoted werden

Diese Liste ist nicht vollständig, sollte aber für die meisten Fälle reichen. Die komplette Liste findet man in Rex Swain's HTMLified Perl 5 Reference Guide.

Kommentare

Ebenfalls ganz wichtig sind Kommentare im Quelltext. Diese können mit dem Zeichen # eingeleitet werden. Sobald dieses Zeichen ausserhalb eines Textes erscheint, wird der Rest der Zeile als Kommentar betrachtet.

print "Content-type: text/html\n\n"; # Ausgabe des MIME-Types an den Browser

print "Das Rautezeichen # innerhalb eines Textes in \"\" ist kein Kommentar";

print "Text 1"; # Komm. gelten bis Zeilenende. Befehle werden ignoriert print "Text 2";

# In Perl gibts es - anders als in anderen Programmiersprachen -
# keine Möglichkeit, einen Kommentar über mehrere
# Zeilen zu erfassen. Das #-Zeichen muss auf jeder neuen Zeile
# nochmals vorhanden sein!

Zusammenfassung

In diesem Kapitel haben wir das erste Script geschrieben, die erste Zeile jedes Scripts mit dem Pfad zu Perl angesehen und den print-Befehl kennen gelernt. Ebenfalls wissen wir, dass jede Zeile mit einem Strichpunkt (;) abgeschlossen werden muss, kennen Sonderzeichen wie \n für einen Zeilenumbruch und wissen auch, dass wir mit # Kommentare in unser Script einfügen können.

Ziemlich viel Stoff für den Anfang, oder?

Wie geht's weiter?

Im Kapitel 3 befassen wir uns mit Variablen

Im vorherigen Kapitel (1) haben wir einen Webserver mit Perl/CGI-Unterstützung installiert.

Sie können aber auch zurück zum Inhaltsverzeichnis und dort ein beliebiges anderes Kapitel auswählen.