Was ist daran falsch?

Hi,
ich hab mal wieder ein Problem mit CGI auf Strato. Ich will einen Zähler auslesen und den Inhalt in eine Vorlage schreiben und ausgeben.

Folgendes Script:
#!/usr/bin/perl

use CGI::Carp ‚fatalsToBrowser‘;

Pfad zur Zählerdatei

$zaehlerdatei = ‚seppzaehler.log‘;
$vorlagedatei = ‚zaehlervorlage.html‘;

Zahl einlesen

open (ZAEHLER,"+;
close (ZAEHLER);

Zahl ermitteln

($count,$eol) = split(/|/,@aktuellezahl);

Vorlage einlesen

open (VORLAGE,"+)
{
if $zeile =~ m/zaehler/io)
{ print $count;
}
else
{ print $zeile;
}
}
close (VORLAGE);

Leider funktioniert das nicht. Ich erhalte immer einen Fehler „Execution of sepp.cgi aborted due to compilation errors.“ Leider sehe ich den Fehler nicht und die Rechte sind richtig gesetzt.
Vorschläge?

Danke
Daniel

Es fehlt einfach eine ( in der zeile 23
die muß richtig heißen
if ($zeile =~ m/zaehler/io)

Hi,

#!/usr/bin/perl

#!/usr/bin/perl -w
use strict;

open (ZAEHLER,"+;

perldoc -f my

„Execution of sepp.cgi aborted due to compilation errors.“

Was liefert Dir

perld -c script.pl

Cheatah

Es fehlt einfach eine ( in der zeile 23
die muß richtig heißen
if ($zeile =~ m/zaehler/io)

Uuups, das ist natürlich korrekt. Funktioniert aber leider immer noch nicht.

Daniel

#!/usr/bin/perl -w
use strict;

führt zu Scriptfehlern. bei perl -c

open (ZAEHLER,"+;

perldoc -f my

???
Meinst Du damit ich soll mir die Perl-Doku zu my anschauen? Wie auch immer, lokal funktioniert alles.

„Execution of sepp.cgi aborted due to compilation errors.“

Was liefert Dir

perld -c script.pl

Syntax OK
Wie gesagt funktioniert es lokal aber nicht auf dem Server.

So long und vielen Dank für Deine Hilfe
Daniel

Hi,

#!/usr/bin/perl -w
use strict;

führt zu Scriptfehlern. bei perl -c

nein - es zeigt Dir Scriptfehler auf, die Du vorher nicht bemerkt hattest. Beginne Deine Scripts _immer_ so - von Anfang an!

open (ZAEHLER,"+

Schlecht. Verwende keinen fremden Code, ohne ihn zu verstehen.
Benutze Deine Doku.

Mist, einmal kopiere ich und schon werde ich erwischt. Ausgerechnet ich… (buhuuu…)

"Internal Server Error

Egal. Schau im Error-Log des Servers nach - das müßte auf der
Fehlerseite auch empfohlen werden.

Jupp. Leider gibt es die genannte error.log nicht auf unserem Server.

Meinst Du damit ich soll mir die Perl-Doku zu my anschauen?

Exakt.

Macht mich auch nicht schlauer - bzw. ich weiß nicht genau was Du damit meinst (hab hier das Kamel-Buch).

Wie auch immer, lokal funktioniert alles.

Nur, wenn Du durch Weglassen von -w und strict schnodderiges
Perl erlaubst :smile:

Ala gut, hab jetzt alles auf ein Minimum runtergefahren:


#!/usr/bin/perl -w
use strict;

print „Hallo“;

Funktioniert immer noch nicht (nur lokal).
Alle Attribute sind nach bestem Wissen und Gewissen gesetzt (755). Datei als ASCII übertragen.

Irritierend ist, das ein anderes Script, bei dem keine Ausgabe an den Browser stattfindet, wunderbar funktioniert (ein einfacher Downloadzähler).

Ich steh echt im Dunkeln.

Danke
Daniel

Hi,

Mist, einmal kopiere ich und schon werde ich erwischt.
Ausgerechnet ich… (buhuuu…)

*g* :smile:

Egal. Schau im Error-Log des Servers nach - das müßte auf der
Fehlerseite auch empfohlen werden.

Jupp. Leider gibt es die genannte error.log nicht auf unserem
Server.

Das halte ich ehrlich gesagt für unwahrscheinlich - Du hast sie nur noch nicht gefunden. Frage den Serveradministrator, was er konfiguriert hat.

Meinst Du damit ich soll mir die Perl-Doku zu my anschauen?

Exakt.

Macht mich auch nicht schlauer - bzw. ich weiß nicht genau was
Du damit meinst (hab hier das Kamel-Buch).

Ein Handbuch ist _nicht_ die Doku. Die wird mit Perl mitgeliefert und läßt sich durch schlichte Eingabe von z.B. perldoc perl aufrufen. Bei ActivePerl ist sie sogar als HTML-Version dabei.

Alternativ gibt es übrigens auch http://www.perldoc.org/.

Ala gut,

Zwischenfrage: Woher kommst Du? :smile:

#!/usr/bin/perl -w
use strict;

print „Hallo“;

Das ist _kein_ CGI-Script. Dies _muß_ einen Internal Server Error verursachen, weil Du keinen HTTP-Header ausgibst.

#!/usr/bin/perl -w
use strict;
print „Content-type: text/plain\n\n“;
print ‚Hallo‘;

Besser, zumindest wenn das Script weiterentwickelt werden soll:

#!/usr/bin/perl -w
use strict;
use CGI ‚:standard‘;
print header(‚text/plain‘), ‚Hallo‘;

Funktioniert immer noch nicht (nur lokal).

Dann ist Dein lokaler HTTP-Server defekt.

Irritierend ist, das ein anderes Script, bei dem keine Ausgabe
an den Browser stattfindet, wunderbar funktioniert (ein
einfacher Downloadzähler).

Per HTTP _muß_ eine Rückgabe stattfinden - auch wenn die z.B. nur ein Redirect ist, was ich hier vermute.

Cheatah