TED116: HTML-Seiten in Perl generieren - ohne print-Anweisung?

Hallo Forengemeinde,

ich hab mal eine allgemeine Frage zu Perl.
Wenn ich ein Perl/cgi Skript schreibe und dort eine html-Seite generieren möchte, habe ich bis jetzt vor jeden Tag print"..\n"; geschrieben. recht nervig.

Nun habe ich etwas gesehen und wollte mal wissen, ob das Standard von Perl ist.
In einer Perl Datei wird die Html-Seite folgendermaßen eingeleitet:
<  print qq~<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

und so beendet
< ~;

Dazwischen wird die html-Seite normal ohne print-Anweisungen programmiert.

Ist das Standard?
Da ich erst vor kurzem mit der cgi-Programmierung angefangen habe, kenn ich halt nur den obigen Standard.

Grüße (und ein schönes Wochenende)

  1. Hallo Ted,

    folgendes hilft Dir wahrscheinlich weiter

    print << "EOT";
    Hier HTML
    EOT

    EOT muß am Zeilenanfang stehen !!!
    Dort wo "Hier HTML" steht, kannst Du sämtliche HTML Befehle verwenden und sogar Perl-Variablen.

    Außerdem geht noch folgende Variante:

    print "html
    zweite html-zeile
    dritte html-zeile";

    Gruß
      Christian Schnagl

    1. Hi all!

      Außerdem geht noch folgende Variante:

      print "html
      zweite html-zeile
      dritte html-zeile";

      Eben, und genau das stand da im Prinzip bei TED116. Nur dass er andere String-Begrenzer (Delimiter) verwendet hat. Es handelt sich hierbei um die sogenannten "Quote and Quote-like Operators" (http://www.activeState.com/ActivePerl/docs/lib/Pod/perlop.html#Quote_and_Quote_like_Operators).

      Der Ausdruck   qq{foo}  ist gleichbedeutend mit  "foo". Dies ergibt einen Stringwert, der ganz normal weiterverarbeitet werden kann. Dabei werden ebenfalls Variablen ausgewertet, z.B. wird in  qq{foo$bar} der Wert von $bar eingesetzt, genauso wie dies bei "foo$bar" geschieht. Dagegen wird bei  q{foo$bar}  (nur ein q) nicht ausgewertert, ist also gleichbedeutend mit 'foo$bar'.

      Die curly brackets { } als Delimiter sind nicht zwingend, man kann genauso andere Klammern oder auch einfache Zeichen nehmen. So schreibt man statt s{}{} im allgemeinen einfach s///. Genauso kann man statt qq{} einfach qq// oder auch qq~~ schreiben. Und nichts anderes wurde in TED116's Beispiel getan.

      Das alles spiegelt nur wieder, wie ich die Informationen bei oben angegebenem Link interpretiert habe und erhebt keinen Anspruch auf Richtigkeit. Die Lektuere kann ich jedenfalls empfehlen.

      Calocybe

  2. Es gibt etwas namens Eperl. Damit kannst du Perl wie PHP3 in deine Seiten einbinden. Der Syntax ist glaube ich in etwa so:

    HTML
    Blablabla
    [+ hier Perlcode +]
    Wieder html.

  3. Hi,

    Nun habe ich etwas gesehen und wollte mal wissen, ob das Standard von Perl ist.
    In einer Perl Datei wird die Html-Seite folgendermaßen eingeleitet:
    <  print qq~<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

    und so beendet
    < ~;

    ja, das ist Standard; siehe perldoc -f qq (wenn Du Perl installiert hast, ist eine hervorragende Dokumentation auf Deiner Festplatte! Sonst via Telnet eingeben.):

    qq/STRING/

    Generalized quotes. See perlop.

    perldoc perlop sagt dann unter "Quote and Quote-like Operators" noch einiges mehr.

    Cheatah

  4. Hallo Forengemeinde,

    ich hab mal eine allgemeine Frage zu Perl.
    Wenn ich ein Perl/cgi Skript schreibe und dort eine html-Seite generieren möchte, habe ich bis jetzt vor jeden Tag print"..\n"; geschrieben. recht nervig.

    Jepp hat mich schon bei meinem ersten Perl versuch generft (das guestbook)
    Drum habe ich kurzerhand (naja 5 stunden hats wohl gedauert einen converter gebastelt.
    Der convertiert eine HTML datein in perl print befehle...recht pracktisch.

    <perl>
    ########################################################################

    Dieses Script liest den Inhalt einer Html Datei ein und        #

    konvertiert ihn zu Perl Script print Anweisungen.              #

    Dabei werden Steuerzeichen automatisch in die entsprechenden

    Escape Sequenzen umgewandelt

    written bei Knut Meinke(zweites von vielen)

    ########################################################################

    open (INPUT, "<$ARGV[0]");  # Öffnen der Datein
    open (OUTPUT, ">out.pl");
    while(defined($Zeile = <INPUT>)) # Einlesen der INPUT Datei bis Dateiende
    {
    $Zeile =~ s/"/\"/g;   # Alle doppelten Anführungszeichen suchen und durch " ersetzen
    $Zeile =~ s/@/\@/g;   # Alle Klammeraffen suchen und durch @ ersetzen

    chomp($Zeile);     # Das letzte \n (Zeilenvorschub) abschneiden
    $Zeile .= "\n";   # Schreibt am Ende jeder Zeile \n als plain Text
    print OUTPUT "print " ",$Zeile,"";\n";# Schreibt jede Zeile inerhalb einer print Anweisung
    }     # in die Datei out.pl

    close(INPUT);     # Schließen der Datein
    close(OUTPUT);

    ---------
    </perl>