xNeTworKx: Jetzt ist es schon fast zum weinen, here-documents

Hallo,
Also ich weis nicht, was da verhext ist, aber manchmal funktionieren here Documents, manchmal nicht. Ich hab zwar schon mal gefragt, da bekam ich den Hinweis, daß ich print <<"EOF"; unter " setzen soll, was ich auch getan hab. Jetzt hat es eine Weile funktioniert, auf einmal kommt von einem File zum nächsten die Meldung : Can't find string terminator anywhere before EOF.
Ich weis einfach nicht, was ich noch beachten soll, einerseits weis ich, daß print <<"EOF"; und EOF jeweils ganz am Anfang der Zeile stehen muss, aber gibt es vielleicht noch eine Kleinigkeit die ich nicht beachtet hab. Hier ein Beispiel wo es nicht funktioniert.

#!C:/Perl/bin/Perl -w

print "Content-type:text/html\n\n";

print <<"EOF";
<html>
<head>
  <style type="text/css">
    body{background-image:url(../galaxy.jpg);
        background-repeat:no-repeat;
        background-attachment:fixed;
        background-color:#000000;
        font-family:Verdana, sans-serif;
        font-size:14px;
        font-weight:bold;
        Color:#ffff00}
   a:link {color:#ffaa00; text-decoration:none }
   a:visited {color:#ffaa00; text-decoration:none }
   a:hover {color:#ffff00; text-decoration:underline }
   a:active {color:#ffff00; text-decoration:underline }
   a:focus {color:#ffff00; text-decoration:underline }
   table {width:800px}
      td {text-align:center}
  </style>
<title>Links</title>
</head>
<body>
 <table>
 <colgroup>
 <col width="50%">
 <col width="50%">
 </colgroup>
 <tr><td><a href="test">test</a></td><td><a href="test">test</a></td></tr>
</body>
</html>
EOF

  1. Hallo,

    Also ich weis nicht, was da verhext ist, aber manchmal funktionieren here Documents, manchmal nicht. Ich hab zwar schon mal gefragt, da bekam ich den Hinweis, daß ich print <<"EOF"; unter " setzen soll, was ich auch getan hab.

    Also ich mache das nie, und es funktioniert immer.
    Allerdings, und das solltest Du jetzt prüfen, darf die Datei inicht mit einem EOT aufhören, also zumindest nicht ohne einem Zeilenumbruch am Ende. Ich weiß ja nicht, ob es bei mir zu wenig perlish zugehet, aber Here-Documents sehen bei mir so aus:
    print <<EOT
    bla
    blub
    ploing
    EOT
    ;

    (Wahrscheinlich, weil für mich der Text zur Anweisung gehört, und Anweisungen mit einem Strichpunkt abgeschlossen werden. Andersrum finde ich es unlogisch.)

    Grüße
      Klaus

    1. Hi,

      darf die Datei inicht mit einem EOT aufhören, also zumindest nicht ohne einem Zeilenumbruch am Ende.

      richtig. Das "EOT" muss der _gesamte_ Inhalt einer _vollständigen_ Zeile sein - und jeder, der mal unter Unix wc -l auf eine Datei ohne Zeilenumbruch ausgeführt hat weiß, dass ein solcher zu einer Zeile dazugehört :-)

      print <<EOT

      Das würde ich auf Semikolon abschließen,

      EOT
      ;

      dies jedoch nicht :-)

      (Wahrscheinlich, weil für mich der Text zur Anweisung gehört,

      Genau das tut er eigentlich nicht. Es ist ein "Dokument", welches sich "hier" befindet, darum nennt es sich "here-document" ;-)

      und Anweisungen mit einem Strichpunkt abgeschlossen werden. Andersrum finde ich es unlogisch.)

      Nun, Du beendest hier die Anweisung "", was nicht wesentlich anders ist, als zwei Semikola aufeinanderfolgen zu lassen... :-)

      Cheatah

    2. Hallo,
      danke, ich musste nur einen Zeilenumbruch machen, und es funktionierte.
      Ich glaub jetzt is das Problem ein für alle Mal gelöst =)