Patric: CGI.pm

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.

  1. 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

    1. 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

      1. 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

        1. 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

  2. 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