Homepage-Webhilfe Event-Banner

Ausgaben

Das CGI-Modul stellt einige Funktionen zur Ausgabe von HTTP-Headern und HTML-Code zur Verfügung. Diese Funktionen wollen wir uns in diesem Thema etwas genauer anschauen.


Mit der Funktion header() einer CGI-Instanz ist es möglich, einen HTTP-Header auszugeben. Der Funktion kann eine Hash-Referenz übergeben werden. Als Namen für die Hash-Elemente stehen u. a. -status, -type und -expires zur Verfügung. Mit -status kann die Statusmeldung gesetzt werden, welche den Statuscode und den Statustext enthält. Die Statusmeldung befindet sich in der ersten Zeile in einem HTTP-Antwort-Header. Die Standard-Statusmeldung ist 200 OK, die nicht explizit gesetzt werden muss. Mit -type wird das HTTP-Headerfeld Content-Type festgelegt. Dort wird der sogenannte MIME-Typ und ggf. die Zeichenkodierung (engl. charset) festgelegt. Mittels -expires kann der Ablaufzeitpunkt bzw. die Gültigkeitsdauer des Dokuments festgelegt werden. Dies hat zur Folge, dass der Browser, wenn er das Dokument zum ersten Mal anfragt, dieses für den angegebenen Zeitraum im Cache-Speicher ablegt. Wird das Dokument dann innerhalb dieses Zeitraums erneut geladen, so wird dieses aus dem Cache geladen. Wird es hingegen nach dem Ablaufzeitraum aufgerufen, so wird das Dokument erneut vom Server geholt. Als Wert für -expires sind absolute Zeitangaben oder Zahlen in Kombination mit Kürzeln (s für Sekunde, m für Minute, h für Stunde, f für Tage, M für Monate und y für Jahr) möglich. Wird eine Zahl mit einem Kürzel verwendet, so muss der Zahl noch ein Pluszeichen + vorangestellt werden.

#!/usr/bin/perl -w

use strict;
use CGI;

my $cgi = new CGI();

# Header-Ausgabe
print $cgi->header({
    -status => '200 OK',
    -expires => '+1h',
    -type => 'text/html; charset=UTF-8'
});

# HTML-Ausgabe
print <<END;
<!Doctype html>
<html>
    <head>
        <title>Ausgabe Header - Perl Code-Beispiel</title>
        
        <meta charset="utf-8" />
        
        <meta name="robots" content="noindex,nofollow" />
        <meta name="publisher" content="Homepage-Webhilfe" />
    </head>
    
    <body>
        <p>Hier steht der Inhalt ...</p>
    </body>
</html>
END
Vorschau

Bisher haben wir HTML-Code mittels print-Befehlen ausgegeben. Doch im CGI-Modul gibt es auch einige Funktionen, die es ermöglichen, HTML-Code einfacher zu erzeugen. Das CGI-Modul erzeugt standardmäßig einen XHTML 1.0 Transitional konformen Code. Über Umwege können auch andere Dokumenttypen (z. B. HTML 4.01) gewählt werden. Das Erzeugen von HTML5-Code ist jedoch nicht problemlos möglich, da HTML5 über keine DTD verfügt.

Als erstes wollen wir uns damit beschäftigen, die HTML-Grundstruktur sowie den Inhalt innerhalb des head-Elements zu erzeugen. Hierfür nutzen wir die Funktionen start_html() und end_html(). Der Funktion start_html() kann eine Hash-Referenz übergeben werden. Mittels -title kann dort der Seitentitel festgelegt werden. Die Elementnamen -style und -script erlauben das Einbinden von Stylesheet- (link-Element mit dem Wert stylesheet im rel-Attribut) und Skript-Dateien (script-Element). Über -encoding kann die Zeichenkodierung festgelegt werden. Diese wird im ausgegebenen HTML-Code in einem meta-Element, welches lediglich bei älteren HTML-Versionen und XHTML verwendet wird, angegeben. -lang erlaubt das Festlegen der Sprache. Diese wird bei XHTML im html-Element über das Attribut lang festgelegt. Weitere Meta-Angaben können mit -meta spezifiziert werden. Hier ein kurzer Beispielcode:

#!/usr/bin/perl -w

use strict;
use CGI;

my $cgi = new CGI();

print $cgi->start_html({
    -title => 'Meine Perl-Webseite',
    -encoding => 'UTF-8',
    -lang => 'de-DE',
    -meta => {
        'publisher' => 'Max Mustermann'
    }
});
print $cgi->end_html();

Der obige Code erzeugt folgenden HTML-Code:

<!DOCTYPE html
	PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="de-DE" xml:lang="de-DE">
<head>
<title>Meine Perl-Webseite</title>
<meta name="publisher" content="Max Mustermann" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>

</body>
</html>

Perl ist mit Hilfe des CGI-Moduls in der Lage, so ziemlich jedes HTML-Element auszugeben. Dafür stehen die Funktionen x(), start_x() und end_x() zur Verfügung, wovon x durch den HTML-Elementnamen ersetzt wird (z. B. div(), start_div() und end_div()). Den Funktionen x() und start_x() können eine Hash-Referenz übergeben werden. Der Funktion x() kann des Weiteren noch der Inahlt des Elements übergeben werden. Die Hash-Referenz wird dazu verwendet, die Attribute des Elements festzulegen. Dafür wird als Elementname eines Hash-Eintrags der Name des Attributs mit einem vorangestellten Bindestrich - notiert (z. B. -style für das style-Attribut). Die Funktion x() gibt das komplette Element (Start-Tag ggf. mit Attributen, Inhalt und End-Tag) aus, wohingegen die Funktion start_x() lediglich den Start-Tag (ggf. mit Attributen) ausgibt. end_x() gibt lediglich den End-Tag aus. Bei kleineren bzw. „einfacheren“ Ausgaben wird zumeist die Funktion x() verwendet. Die Funktionen start_x() und end_x() werden immer in Kombination verwendet und dienen zur Ausgabe größerer und komplexerer Inhalte, da es hier möglich ist, zwischen den Funktionsaufrufen anderen Perl-Code wie z. B. Verzweigungen oder Schleifen zu notieren. Mit Hilfe der Funktion comment() ist es möglich, einen HTML-Kommentar zu erzeugen. Als Parameter wird hier der Text für den Kommentar übergeben. Das folgende Beispiel zeigt die Verwendung verschiedener Funktionen zur Ausgabe von HTML-Code mittels des CGI-Moduls:

#!/usr/bin/perl -w

use strict;
use CGI;

my $cgi = new CGI();

# Header-Ausgabe
print $cgi->header({
    -type => 'text/html; charset=UTF-8'
});

# HTML-Ausgabe
print $cgi->start_html({
    -title => 'Ausgabe HTML-Code - Perl Code-Beispiel',
    -encoding => 'UTF-8',
    -lang => 'de-DE',
    -meta => {
        'robots' => 'noindex,nofollow',
        'publisher' => 'Homepage-Webhilfe'
    }
});
print $cgi->comment('Ab hier kommt der Inhalt ...');
print $cgi->h1('Ausgabe HTML-Code');
print $cgi->img({
    -style => 'float: left;',
    -src => '/Bilder/Logo/Logo.jpg',
    -width => 100,
    -height => 100,
    -alt => 'Homepage-Webhilfe Logo',
    -title => 'Homepage-Webhilfe'
});
print $cgi->p({
    -style => "width: 500px; text-align: justify;"
}, '...');
print $cgi->br();
print $cgi->i('Copyright 2016 by '.$cgi->a({
        -href => 'https://www.homepage-webhilfe.de',
        -target => '_blank'
    }, 'Homepage-Webhilfe')
);
print $cgi->end_html();
Vorschau

Wichtig: Auf Grund von Überschneidungen mit dem Wortschatz von Perl müssen bei der Erzeugung der HTML-Elemente link, select, sub und tr die Funktionsnamen mit einem Großbuchstaben geschrieben werden, also z. B. Link() an Stelle von link(). Dies gilt auch für die Funktionen start_x() und end_x() bei Verwendung einer der genannten Elemente.

Übrigens: Es ist natürlich auch möglich, Ausgaben mittels der Funktionen des CGI-Moduls mit einfachen direkten Ausgaben (wie im Einleitungsbeispiel) zu mischen.

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