Dirk: Laufzeitproblem im Browser ???

Hallo zusammen,

Seit einiger Zeit habe ich bei verschiedenen Scripten ein seltsames Verhalten im Browser festgestellt.

So führen simple Schleifen, in denen einfache Textoperationen ausgeführt werden dazu, dass der Browser lädt und lädt und ...
und am Ende einen TimeOut-Read-Fehler meldet.

Hier mal ein konkreter Fall:

foreach(@TABELLE)
 {
  @dummy=split(/\t/,$TABELLE[$zz]);
  $eintrag[$zz]="<tr><td width=5% align=center><input type=radio name=manus value='$dummy[0]'></td><td width=45% align=center bgcolor=white>$dummy[0]<font color=red><b>$MANUS_MATCH{$dummy[0]}</font></b></td><td width=45% align=center bgcolor=white>$dummy[1]<font color=red><b>$COP_MATCH{$dummy[1]}</font></b></td><td width=5% align=center><input type=radio name=cop value='$dummy[1]'></td></tr>\n";
  $zz++;
 }

Auch die direkte Ausgabe mit "print" funktioniert nicht.

Noch seltsamer: ersetze ich das "foreach" im Kopf der Schleife durch ein "for" funktioniert es, wenn ich die Schleife (in diesem Fall) maximal 7x durchlaufen lasse. ( for($i=0;$i<7;$i++) )

Erhöhe ich den "Zähler" rödelt sich der Browser wieder zu Tode.

Das Ausführen des Scriptes direkt auf dem Server (SSH) ist überhaupt kein Problem.

Und wieder bei anderen Scripten kann ich hunderte von Schleifen ohne Probleme durchlaufen.

Hat schon mal jemand sowas beobachtet und an was kann das denn liegen.

Viele Grüße aus Dresden
Dirk

  1. So führen simple Schleifen, in denen einfache Textoperationen ausgeführt werden dazu, dass der Browser lädt und lädt und ...
    und am Ende einen TimeOut-Read-Fehler meldet.

    Da vermute ich eher ein Problem in der HTML Ausgabe.

    Hier mal ein konkreter Fall:

    foreach(@TABELLE)
    {
      @dummy=split(/\t/,$TABELLE[$zz]);

    Du benutzt kei use strict?
    Außerdem ist diese Konstrukt umständlich
    foreach(@TABELLE)
    {
    my @dummy = split /\t/, $_;

    $eintrag[$zz]="<tr><td width=5% align=center><input type=radio name=manus value='$dummy[0]'></td><td width=45% align=center bgcolor=white>$dummy[0]<font color=red><b>$MANUS_MATCH{$dummy[0]}</font></b></td><td width=45% align=center bgcolor=white>$dummy[1]<font color=red><b>$COP_MATCH{$dummy[1]}</font></b></td><td width=5% align=center><input type=radio name=cop value='$dummy[1]'></td></tr>\n";
      $zz++;

    Keine Ahnung was  qeintrag ist, aber du wollstest hier eher push verwenden, auch bietet das CGI Modul eine vielfältige Sammlung von Funktionen, um solchen unleserlichen Code zu vermeiden.

    Noch seltsamer: ersetze ich das "foreach" im Kopf der Schleife durch ein "for" funktioniert es, wenn ich die Schleife (in diesem Fall) maximal 7x durchlaufen lasse. ( for($i=0;$i<7;$i++) )

    Erhöhe ich den "Zähler" rödelt sich der Browser wieder zu Tode.

    Wie gesagt hört sich für mich eher nach einem Problem der Ausgabe an, als eines im Skript.

    Struppi.

  2. Hallo Dirk,

    foreach(@TABELLE)
    {
      @dummy=split(/\t/,$TABELLE[$zz]);
      $eintrag[$zz]="<tr><td width=5% align=center><input type=radio name=manus value='$dummy[0]'></td><td width=45% align=center bgcolor=white>$dummy[0]<font color=red><b>$MANUS_MATCH{$dummy[0]}</font></b></td><td width=45% align=center bgcolor=white>$dummy[1]<font color=red><b>$COP_MATCH{$dummy[1]}</font></b></td><td width=5% align=center><input type=radio name=cop value='$dummy[1]'></td></tr>\n";
      $zz++;
    }

    1. du solltest grundlegend etwas strukturierter Programmieren. Es ist
    eine Qual diesen Kauderwelsch zu lesen! Darin einen Fehler zu finden
    ist ziemlich anstrengend. Das betrifft auch den HTML-Quellcode.

    2. Attribute: "Obwohl es vom HTML-Standard her zulässig wäre, dass
    bestimmte Attributwerte auch ohne Anführungszeichen geschrieben
    werden können, sollten Sie diese Möglichkeit nicht nutzen. Es
    verringert die Wahrscheinlichkeit von Fehlern..."

    3. Struktur mit HTML, Design bitte mit CSS. Von CSS ist bei dir
    nichts zu sehen.

    Das Ausführen des Scriptes direkt auf dem Server (SSH) ist überhaupt kein Problem.

    4. was soll SSH damit zu tun haben?

    5. nun zur Perl:

    So führen simple Schleifen, in denen einfache Textoperationen ausgeführt werden dazu, dass der Browser lädt und lädt und ...
    und am Ende einen TimeOut-Read-Fehler meldet.

    Hier mal ein konkreter Fall:

    Woher willst du wissen, dass das Skript genau an dieser Stelle
    hängt? Wenn dein übriger Code genauso schlimm ausschaut, dann kann
    ein Fehler irgendwo und überall drin stecken.

    Vielleicht solltest du dich mit Debugging beschäftigen und dein
    Skript Stück für Stück durchprüfen. Eine Möglichkeit wäre zum
    Beispiel, erst einmal alle Zeilen auszukommentieren und dann Stück
    für Stück wieder einkommentieren, bis du auf den Time-Out läufst.
    Dabei solltest du natürlich nicht vergessen, den HTML-Header
    auszugeben.

    Es gibt soviele Arten von Debugging und jeder hat da so seine
    Methoden. Aber bevor du damit anfängst, wäre es ratsam, dein Skript
    es besser zu strukturieren. Auch den HTML-Code.

    Greez,
    opi

    --
    Selfcode: ie:( fl:( br:^ va:) ls:] fo:) rl:( n4:? ss:| de:] ch:? mo:|