Christoph Schnauß: Ärger mit dem CGI-Modul

Beitrag lesen

hallo Forum,

ich möchte mir von einem Script eine Seite schreiben und als *.htm-Datei abspeichern lassen. Das tut es auch. Wenn ich mir diese generierte Seite aber danach anzeigen lassen möchte, kommt eine (eigentlich bekannte) Fehlermeldung:
  Parse error: syntax error, unexpected T_STRING in I:\prog\perl\test.htm on line 1
In aller Regel deutet sowas darauf hin, daß irgendwo ein Anführungszeichen zuviel ist oder so etwas - jedenfalls dann, wenn man sich die Seite generieren und nur anzeigen läßt. Ich kann sowas aber nicht finden, außerdem gehts nicht um eine temporäre Anzeige, sondern die Seite existiert bereits statisch. Und im log steht gar nix, mein Script ist bugfrei.
Zeile 1 und die nachfolgenden sehen so aus:
  <?xml version="1.0" encoding="iso-8859-1"?>
  <!DOCTYPE html
   PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  <html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
Der restliche Seiteninhalt ist lediglich ein "hallo Welt!". Und wenn ich diese gespeicherte Seite durch den Validator jage, gibts ein freundliches Schulterklopfen: alles valide. Rufe ich die Seite mit einem Browser lokal auf, ohne Vermittlung meines virthost, wird sie auch brav angezeigt. Und wenn ich sie in das root-Verzeichnis eines anderen virthost kopiere, kriege ich sie ebenfalls zu sehen, ohne Fehlermeldung.

Mir fehlt da ein Stück Verständnis. Wenn ich meinem Script sage, daß es die Seite nicht speichern, sondern einfach bloß anzeigen soll, tuts das nämlich. Mit exakt demselben Header - das CGI-Modul erzeugt halt XHTML 1.0, wogegen ich im Prinzip nix einzuwenden habe. Es gibt nur eine Winzigkeit, wodurch sich die Befehle für "anzeigen lassen" und "speichern" unterscheiden müssen. Will ich bloß eine temporäre Anzeige, gebe ich an
  print $cgi->header().$cgi->start_html(...);
damit das Script weiß, daß es (X)HTML ausliefern soll. Will ich eine Datei speichern lassen, gebe ich nur an
print $cgi->start_html();
weil ich sonst als erste Zeile in der neuen Datei ein "Content-type: text/html" stehen habe, was da nicht hingehört.

Und wie kommen meine Browser nun alle auf die Idee, daß da irgendetwas an einer fertigen XHTML-Datei, die valide ist, einen Parse-Error ergeben muß, obwohl exakt dieselbe Datei sich über einen anderen virthost oder einen lokalen Aufruf problemlos darstellen läßt?

Grüße aus Berlin

Christoph S.