HTML-Seiten in Perl generieren - ohne print-Anweisung?
TED116
- perl
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)
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
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
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.
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
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>
########################################################################
########################################################################
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>