print ««EOT; FEHLER
alex
- perl
Hi Leute, ich stehe vor dem Wahnsinn!
Ich habe ein CGI-Skript und da gibt es ne Menge folgender Anweisungen:
print <<EOT;
Hier folgen jetzt html und js befehle...
EOT
Trotzdem mir alles in Ordnung scheint, schreibt mir Perl die Fehlermeldung:
Can't find string terminator "EOT" anywhere before EOF at chess.cgi line 237.
Der beschissene Fehler war auch schon in anderen Dateien von mir, doch da ging der Fehler weg, wenn ich das print einfach neu geschrieben haben, doch das hilft nicht mehr. Unter win32 ist das alles kein prob, doch mein server ist unixabhaengig...
HELP!!!!!! BITTE!!!!!
Hallo alex,
print <<EOT;
[...]
EOT
^.....hier nach Whitespaces suchen ;-)
Can't find string terminator "EOT" anywhere before EOF at chess.cgi line 237.
Das kann daran liegen, daß Du hinter EOT außer einem Zeilenumbruch noch andere Whitespaces stehen hast, oder der Zeilenumbruch fehlt.
Tückisch ist, daß man den Fehler nicht sieht ;-) (außer man markiert ihn)
GrußAlexBausW
P.S.: Ich bin schon selbst dran verzweifelt, aber perldoc hilft (fast) immer :-)
Hallo alex,
print <<EOT;
[...]
EOT
»» ^.....hier nach Whitespaces suchen ;-)
Ja, so was aehnliches dachte ich mir schon, doch der perl compiler hat bisher immer die richtige stelle angegeben, wo ich zu korrigieren hatte.
jetzt zeigt er in eine voellig harmlose zeile innerhalb von [...]. Ich habe in der zwischenzeit auch schon einmal versucht
die whitespaces zu eliminieren, soweit welche da waren, doch nicht bringt den sturen compiler von seiner meinung!
Hi Alex!
die whitespaces zu eliminieren, soweit welche da waren, doch nicht bringt den sturen compiler von seiner meinung!
Bist Du auch ganz sicher, dass Du *direkt* nach dem EOT einmal Enter gedrueckt hast, *auch* wenn dies die letzte Zeile ist (sodass also eine weitere leere Zeile entsteht)?
So long
Hi Alex!
die whitespaces zu eliminieren, soweit welche da waren, doch nicht bringt den sturen compiler von seiner meinung!
Bist Du auch ganz sicher, dass Du *direkt* nach dem EOT einmal Enter gedrueckt hast, *auch* wenn dies die letzte Zeile ist (sodass also eine weitere leere Zeile entsteht)?
Die stellen beginnen mit print <<EOT;
Und enden immer mit EOT
Gefolgt, wie hier, mit einem enter. Ich kann sadistischerweise nochmal ueberall schauen, aber ich bin mir schon ziemlich sicher
hi ho
mein proton zum beispiel _loescht_ ueberfluessige spaces am ende jeder zeile und am ende der datei.
wenn also meine perl-datei folgendermassen endet:
print <<EOT
blala
EOT
gibt das nach dem ersten abspeichern einen error. warum? weil die letzte zeile nach dem EOT fehlt - sinnreiche abhilfe:
nach dem EOT eine kommentarzeile einfuegen, zum beispiel
EOT
cua
n.d.p.
Hallo alex!
Es gibt noch eine andere Fahlerquelle als whitespaces hinter EOT. Es ist naemlich ebenfalls nicht erlaubt whitespaces vor dem EOT zu haben!
Beispiel:
sub ohne_namen {
$text = <<'EOT';
eine zeile
und noch eine zeile
die dritte zeile
EOT
print $text;
}
Ausserdem ist es bei JS-Quellcode vielleicht guenstig, EOT in single-quotes zu stellen, da in dem Quellcode ja escape-Sequenzen enthalten seien koennen.
Gruesse,
Thilo
SUFFER!
Macht es sinn das Skript (32kb) hier upzuloaden?
Ich krieg die Krise, alle eure Ratschlaege waren gegen meinen wahrscheinlich bestochenen Compiler machtlos.
Vielleicht hat einer grad die moeglichkeit das mal schnell zu kompilieren?
Hallo Alex!
Verzeihe mir die blöde Frage, aber... wenn die Entfernung von Leerzeichen und das Setzen eines Returns hinter den "EOT"s nichts hilft... könnte das vielleicht sein, dass Du irgendwo eine Anweisung mit
print <<EOT;
begonnen hast, die Du *nicht* mit
EOT
geschlossen hast?
Bis danndann
PAF (patrickausfrankfurt)
<img src="/selfaktuell/extras/selfcomm.jpg" alt=""> http://www.atomic-eggs.com/selfspezial/guests/advguest.cgi?view
<img src="http://www.atomic-eggs.com/selfspezial/atomicegg.gif" alt="Atomic Eggs - die humosophische Seite" style="cursor:hand;" onMouseUp="window.location.href='http://www.atomic-eggs.com/'" onmouseover="status='http://www.atomic-eggs.com/';return true;" onmouseout="status='';return true;">
print <<EOT;
Hier folgen jetzt html und js befehle...
EOT
wenn hier der Script fertig ist, schmeiss einfach noch ein exit rein:
...
EOT
exit;
Wieso dass das sein muss weis ich nicht, aber mit exit; funzts!
Gruss
Flunsi
Danke Leute.
Ich hab es endlich geschafft, mit Müh und Not. Es funzt!!
Danke für die Tips...
Hi Alex!
Ich hab es endlich geschafft, mit Müh und Not. Es funzt!!
Was wars denn? Ich denke, das interessiert auch die anderen hier und wer das gleiche Problem hat und diesen Beitrag später im Archiv liest, muß nicht erst alle Varianten durchprobieren...
Gruß Frank
Achso, es lag nicht nur an den Whitespaces hinter dem EOT, sondern prinzipiell an allen überflüssigen Whitespaces im skript. So deute ich den fehler...
Falls jemand gleiche Probs damit haben sollte:
jetzt sieht meine Lösung so aus:
print <<'EOT';
html,js stuff
EOT
überall schön brav ein enter ohne whitespace davor.
Ein exit ist nicht notwendig, zumindest nicht bei mir.
Und es funzt.
Thanx to all.