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