Jörk Behrends: Seltsamer Effekt bei substr()

Beitrag lesen

Moin Cheatah

5120 6F 6E 3A 6E 6F 6E 65 3B 20 7D 0A 0A 0A 0A 0A 2F on:nsubstr outside of string at c:\programme\netz\homepage neu\test\surf\surf.pl line 87.
substr outside of string at c:\programme\netz\homepage neu\test\surf\surf.pl line 87.

[...]

substr outside of string at c:\programme\netz\homepage neu\test\surf\surf.pl line 89.
one; }...../
5136 2A 20 57 65 6E 6E 20 53 69 65 20 73 69 63 68 20 * Wenn Sie sich
5152 6D 69 74 20 53 74 79 6C 65 2D 53 68 65 65 74 73 mit Style-Sheets
[...]

Wenn man genauer hinguckt merkt man, daß der Text "text-decoration:n[...]one;" verlustfrei unterbrochen wird. Die Fehlermeldung, die übrigens an verschiedenen Stellen in verschiedener Anzahl auftaucht, immer jedoch n mal in Zeile 87 und n mal in Zeile 89, kann ich zwar übersetzen, aber ich verstehe sie nicht. Sie wird in folgender Routine erzeugt:

Wie wäre es denn mit der Möglichkeit, daß die Fehler gar nicht an der Stelle passieren, an der die Ausgabe gestört wird - von wegen gepufferte Ausgabe und so ...

Dann könnte ich eine Theorie dazu beisteuern:

sub hexdump {
   $z = length(length($_[0]));
   print "<nobr><pre>\n";
   print "Datei: $url\n";
   print "Länge: ".length($_[0])." Bytes\n\n";
   for ($i=0; $i<length($_[0]); $i+=16) {
      print substr($i."          ",0,$z)." ";
      for ($j=$i; $j<=$i+15; $j++) { print &dez2hex(substr($_[0],$j,1))." "; }
      print " ";
      for ($j=$i; $j<=$i+15; $j++) { print &chrprint(substr($_[0],$j,1)); }
      print "\n";
   }

Wenn die Länge des Textes $_[0] nicht durch 16 teilbar ist, hast Du im letzten Schleifendurchlauf das Problem, daß $i+15 über das Ziel hinausschießt! Müßte man eigentlich abzählen können - Du gibst ja am Anfang auch die Länge mit aus ...

Gruß,
   Jörk