CGI.pm
Patric
- perl
0 Wolfgang Wiese0 Cheatah
0 Cheatah
Guten Morgen,
nachdem ich letztens mit der Nase auf die Existenz der CGI.pm hingewiesen wurde, möchte ich sie dann auch nutzen. Hab' da ein winziges Problem. Folgende Situation:
print table({-align=>center});
for(my $i=0;$i<10;$i++) {
print Tr(td( hier steht der Inhalt)));
}
print "</table>";
Gibt es keine Funktion in CGI.pm, welche das Tabellenende ausgibt? Gibt es 'ne elegantere Art, so einen Konstrukt auszugeben?
Danke und bis bald.
Hi,
nachdem ich letztens mit der Nase auf die Existenz der CGI.pm hingewiesen wurde, möchte ich sie dann auch nutzen. Hab' da ein winziges Problem. Folgende Situation:
Lass mich raten: DU warst in einer de.*.*.cgi-Newsgroup
in der man auf jede Frage nur die Antwort bekommt, das CGI.pm
das Allheilmittel sei, alles koenne, alles ermoegliche und das ohne
es die Welt aufhoert zu drehen? :)
print table({-align=>center});
»» for(my $i=0;$i<10;$i++) {
»» print Tr(td( hier steht der Inhalt)));
»» }
print "</table>";
Gibt es 'ne elegantere Art, so einen Konstrukt auszugeben?
Oh ja!
Denk daran, das du das Skript vielleicht heute sehr kennst, es aber bestimmt laenger
in Benutzung sein soll. In nem halben Jahr oder so aenderst
du aber das Design der HP und musst somit auch
wieder den Code des CGI's aendern. =>Du musst also erstmal
checken, was der ganze Code macht etc pp..
Nicht sehr schoen.
Loesung: Mach alle HTML-Ausgaben mit Hilfe von Layoutdateien.
Kann z.B. so aussehen:
---
<html><head><title>Meine Ausgabe</title></head>
<body>
<h2>Meine Ausgabe</h2>
Vielen Dank fuer Ihre Daten.<br>
Sie gaben ein: #OUTPUT#
</body></html>
---
In deinem CGI-Programm liest du diese Layoutdatei einfach ein,
ersetzt dann mit ner reg. Exp. die Variable #OUTPUT#
durch die dynamischen Werte und gibst dann das
ganze aus.
(Z.B.:
foreach $key (keys %ENV) {
$formdata .= "<b>$key</b>: $ENV{$key}<br>\n";
}
open(f1,"layout.html") CgiDie("Blafasel");
@LAYOUT = <f1>;
close f1;
print "Content-Type: text/html\n\n";
for ($i=0; $i<=$#LAYOUT; $i++) {
$LAYOUT[$i] =~ s/#OUTPUT#/$formdata/gi;
print $LAYOUT[$i];
}
)
Vorteil: wenn du in nem jahr wieder an die Sache rangehst brauchst du nicht
mehr das CGI aendern, sondern nur noch die
Layoutdatei. Und das koennte dann auch jemand anders machen,
der keine Ahnung von Programmierung hat.
Ciao,
Wolfgang
Hi,
Denk daran, das du das Skript vielleicht heute sehr kennst, es aber bestimmt laenger
in Benutzung sein soll. In nem halben Jahr oder so aenderst
du aber das Design der HP und musst somit auch
wieder den Code des CGI's aendern. =>Du musst also erstmal
checken, was der ganze Code macht etc pp..
wenn man CGI.pm konsequent einsetzt, ist der Code genauso verständlich wie HTML - oder sogar noch besser.
Nicht sehr schoen.
Nicht sehr schön ist es auch, wenn in zwei Jahren plötzlich XML statt HTML verwendet wird. Dann hast Du die Wahl: Sämtliche Scripts manuell anpassen, oder einmal CGI.pm updaten ;-)
Loesung: Mach alle HTML-Ausgaben mit Hilfe von Layoutdateien.
Modularer Aufbau ist eh empfehlenswert, da hast Du recht. Du kannst aber in der entsprechenden Funktion genausogut auf CGI.pm zugreifen.
Cheatah
Hi,
Modularer Aufbau ist eh empfehlenswert, da hast Du recht. Du kannst aber in der entsprechenden Funktion genausogut auf CGI.pm zugreifen.
Ja, man KANN :)
Aber man muss nicht, wie es dauernd von irgentwelchen Fachleuten gepredigt wird...
Wenn es sich lohnt, wie z.B. beim Fileupload, dann ists natuerlich
gut, aber auch hier gibt es Extrema.
Ein Anfaenger der nur CGI.pm kennenlernt und damit
programmieren soll wird IMHO nur schwer lernen ordentlich
Perl zu schreiben.
Ciao,
Wolfgang
Hi,
Modularer Aufbau ist eh empfehlenswert, da hast Du recht. Du kannst aber in der entsprechenden Funktion genausogut auf CGI.pm zugreifen.
Ja, man KANN :)
Aber man muss nicht, wie es dauernd von irgentwelchen Fachleuten gepredigt wird...
oh, das predigt jemand? Also, ich rate prinzipiell dazu, aber "muß" ist sicherlich falsch. Bei kleineren Scripts mit nur drei, vier HTML-Zeilen ist es sicher overdone.
Geschwindigkeits- oder Performanceverluste dürfte es übrigens keine geben, weil CGI.pm im Speicher gehalten wird (werden müßte).
Ein Anfaenger der nur CGI.pm kennenlernt und damit
programmieren soll wird IMHO nur schwer lernen ordentlich
Perl zu schreiben.
Sehe ich anders. Wer früh lernt, mit Modulen umzugehen, lernt Perl. Wer es nicht tut, lernt Perl 4.
Cheatah
Hi,
ich ändere mal gleich:
use CGI qw(:standard *table);
print table({-align=>center});
print start_table({-align=>center});
for(my $i=0;$i<10;$i++) {
print Tr(td( hier steht der Inhalt)));
}print "</table>";
print end_table;
Gibt es keine Funktion in CGI.pm, welche das Tabellenende ausgibt?
Jupp :-) Man muß sie nur explizit importieren.
Übrigens hab ich diese Information aus perldoc CGI ;-)
Cheatah