Kurti: Aufbau von HTML-Seite

Hallo,

bisher baue ich die Seite auf mit

  
        ......  
    use CGI qw(header);  
    print header(-type=>'text/html; charset=ISO-8859-1');  
    print <<AAA;  
    <!DOCTYPE HTML .........>  
    <html>  
    <head>  
     ....  
AAA  
    if (...) {  
      print 'weiterer HTML-Code';  
    }  
    .....  

Jetzt will ich das ganze zunächst in eine Variable schreiben und erst ausgeben, wenn komplett erstellt.
Dabei dachte ich an folgendes:
        ......
    use CGI qw(header);
    my $output = header(-type=>'text/html; charset=ISO-8859-1');
    $output .=<<AAA;
    <!DOCTYPE HTML .........>
    <html>
    <head>
     ....
AAA
    if (...) {
      $output .= 'weiterer HTML-Code';  #@Patrick: Wie Du siehst, bin ich lernfähig (.=)
    }
    .....
[/code]

Mein Problem: Nach Ausführung von $output = header(-type=>'text/html; charset=ISO-8859-1');
ist $output leer.

  1. Meines Wissens gibt header das gewünschte gleich aus, aber es wird nicht zurückgegeben, um es in eine Variable zu schreiben.
    Von daher ist das hier

    print header(-type=>'text/html; charset=ISO-8859-1');

    auch schon falsch gedacht. Die Ausgabe kommt hier von der Funktion header() selbst, aber nicht durch das print.

    1. Hallo Encoder!

      Meines Wissens gibt header das gewünschte gleich aus, aber es wird nicht zurückgegeben, um es in eine Variable zu schreiben.
      Von daher ist das hier

      print header(-type=>'text/html; charset=ISO-8859-1');
      auch schon falsch gedacht. Die Ausgabe kommt hier von der Funktion header() selbst, aber nicht durch das print.

      ???

      header() ist eine Methode des CGI-Moduls. Natürlich muss man den Rückgabewert »printen«. Und natürlich ließe er sich in eine Variable speichern:

      my $content-header = header(-type=>'text/html; charset=ISO-8859-1');
      print $content-header;

      Viele Grüße aus Frankfurt/Main,
      Patrick

      --
      _ - jenseits vom delirium - _

         Diblom   [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
      Achtung Agentur! | Nichts ist unmöglich? Doch! | Heute schon gegökt?
  2. Mein Problem: Nach Ausführung von $output = header(-type=>'text/html; charset=ISO-8859-1');
    ist $output leer.

    Wie prüfst du das?
    Wohin gibst du $output aus?

    use CGI qw(header);  
    my $output = header(-type=>'text/html; charset=ISO-8859-1');  
    print $output;  
    
    

    gibt den HTML Header ohne Body aus.

    mfg Beat

    --
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
    Der Valigator leibt diese Fische
  3. Hallo Kurti!

    my $output = header(-type=>'text/html; charset=ISO-8859-1');
        $output .=<<AAA;
        <!DOCTYPE HTML .........>
        <html>
        <head>
         ....
    AAA

    Nach einem Heredoc-Delimiter gewöhn Dir an im Code IMMER eine Leerzeile zu notieren: »If the terminating identifier is on the last line of the program, you must be sure there is a newline after it; otherwise, Perl will give the warning Can't find string terminator "END" anywhere before EOF....« (schon aus dem Grund).

    Ich würde jedoch den Content-type Content-type sein lassen und es separat ausgeben. Den Rest dann in einer Variable speichern.

    $output .= 'weiterer HTML-Code';  #@Patrick: Wie Du siehst, bin ich lernfähig (.=)

    Sehr gut ;)

    Mein Problem: Nach Ausführung von $output = header(-type=>'text/html; charset=ISO-8859-1');
    ist $output leer.

    In der Konsole funzt™ Dein Code (habe jetzt nicht die Zeit, eine CGI-Ausgabe zu machen).

    Viele Grüße aus Frankfurt/Main,
    Patrick

    --
    _ - jenseits vom delirium - _

       Diblom   [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
    Achtung Agentur! | Nichts ist unmöglich? Doch! | Heute schon gegökt?
    1. Hallo Patrick and Beat,

      In der Konsole funzt™ Dein Code (habe jetzt nicht die Zeit, eine CGI-Ausgabe zu machen).

      Bei mir auch, war ein Fehler in meiner Prüfroutine im Kopf!
      Danke.
      Kurti

  4. Moin Moin!

    Unhabhängig von deinem Problem überleg doch mal, Code und HTML zu trennen, z.B. mit dem Template Toolkit.

    Alexander

    --
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
  5. bisher baue ich die Seite auf mit
    [code lang=html]
            ......
        use CGI qw(header);
        print header(-type=>'text/html; charset=ISO-8859-1');

    Warum verwendest du aus einer Datei, die mindestens 250 KB gross ist und sinnvolle und mächtige Funktionen für die HTML Ausgabe hat, nur eine einzige?
    Das macht doch keinen Sinn. Schau doch mal in die Dokumentation des CGI Moduls was es alles kann.

    <!DOCTYPE HTML .........>
        <html>
        <head>

    z.b. genau diese Sachen baut dir das Modul schön zusammen (noch praktischer wird es, wenn du Tabellen oder Formulare ausgibst).

    Wenn dein Skript größer wird, wirst du aber irgendwann auch ein Template Engine zu schätzen Wissen. Früher wurde oft HTML::Template empfohlen, mittlerweile hat sich das von Alexander empfohlende TT verbreitet, da es flexibler ist.

    Struppi.