Cheatah: Fehler in Prozedur oder Hile ich bin blind

Beitrag lesen

Hi,

#!perl

Du solltest *immer*

use strict;

...und den w-Switch...

und dann natuerlich my verwenden (lass ich *hier* der Einfachheithalber weg)

Also:

#!/path/to/perl -w
use strict;

;-)

$filesize=@lines;

kannst Du weglassen und $#lines benutzen

Nope. scalar @lines liefert die Zahl der Elemente, $#lines den Index des letzten Elementes. Wenn nun beispielsweise $[ auf einen Wert ungleich 0 gesetzt ist, liefert $#lines überhaupt nicht mehr, was man möchte.

open (DATEI>$meine_html) &error($errormsg.$!.')');

open DATEI, ">$meine_html" or die "open DATEI: $!";

Es ist im Prinzip schon okay, eine eigene Funktion im Fehlerfall aufzurufen; nur sollte diese dann auch die'en. Die Syntax des open-Befehls war natürlich falsch, aber ' &error' darf ruhig stehen bleiben.

for ($f=0;$f<=$filesize;$f++) {

for ($f=0; $f=$#lines;$f++) {
oder gar
for (0.. $#lines) {

for (0..scalar @lines - 1)

while ($_ ne /<!--SCRIPTENDE-->/) {

Du meinst (wahrscheinlich)
while ($_ ne '<!--SCRIPTENDE-->') {

Ich tippe mehr auf
while (!/<!--SCRIPTENDE-->/) {

Wobei diese ganze $_-Zuweiserei vermutlich eher nachteilig ist:

for (0..scalar @lines - 1) {
  if ($lines[$_] =~ /.../) {
    while ($lines[$_] !~ /.../) { ... }
  }
}

Hier erhoehst Du den Index ein zweitesmal, d.h. Du ueberspringst jedesmal eine Zeile.

Ich glaube, das ist Absicht - und damit ein wunderbarer Grund, kein for zu benutzen. Setze initial

my $f = 0;

und benutze dann eine while-Schleife, in der _nur Du_ $f erhöhst.

close (DATEI);

Die war schreibend geöffnet, oder? Dann solltest Du auch hier den Fehlercode mit 'or die' oder von mir aus ' &error' abfangen.

Kann sein, dass ich noch etwas uebersehen habe, den Code solltest Du aber auf jeden Fall noch mal ueberdenken.

ACK :-)

rename ($neue_html, $meine_html); # bei Bedarf

Da würde ich noch ein unlink $meine_html vorsetzen; außerdem fährt man meist mit absoluten Serverpfaden besser...

Cheatah