Richard: Problem mit regulärem Ausdruck/Ein-/Auslesen von Arrays

Beitrag lesen

Hallo

Ich hab ein weiteres Problem mit meinem Gästebuch-Script und hab mich nun bereits 1 1/2 Tage vergeblich bemüht, es zu lösen. Dies ist was ich machen möchte:

Ich möchte das bisherige in den array @gaestebuchinhalt eingelesene Gästebuch einfügen in den array @gaestebuchNeu.
Wird in @gaestebuchinhalt der <!-- NEU --> Kommentar gefunden, soll der neue Eintrag/array @eintragNeu sowie
(fürs nächste Mal) wieder der <!-- NEU --> Kommentar eingefügt
und dann mit dem bisherigen Inhalt von @gaestebuchinhalt weitergefahren werden. Abschliessend wird das bisherige
Gästebuch durch den Inhalt des neuen Arrays überschrieben.

Dies ist was effektiv resultiert:

Sobald guestbook.htm unterhalt der <!-- NEU --> -Marke Einträge enthält, die nicht durch das Script erstellt wurden, bleibt das script hängen. Sind diese einträge nicht vorhanden oder sind nur durch das Script generierte Einträge vorhanden, träge es seltsame Zahlen (17, 18, 9 ...) in guestbook.htm ein und im Log hab ich den Eintrag "Use of uninitialized value in pattern match (m//) at ..." mit Bezug auf die Zeile, wo ich die if-Abfrage mache.

Ich kann mir das Verhalten nicht erklären und konnte nirgends eine Erklärung für den Fehler im Zusammenhang mit dem regulären Ausdruck finden (das Beispiel stammt von http://selfhtml.teamone.de/cgiperl/sprache/cgitypisch.htm#gaestebuch).
perldoc hat mir auch nicht weitergeholfen. Hat jemand eine Ahnung, Was mach ich falsch gemacht habe?

Hier noch der betreffende Ausschnitt aus dem Script:

.....

#!c:/program files/perl/bin/perl -w

use diagnostics;
use strict;
use CGI;
use CGI::Carp qw(fatalsToBrowser);

$CGI::POST_MAX=1024 * 100;
$CGI::DISABLE_UPLOADS = 1;

require "datum.pl";
my $date = &ctime(time);
chop($date);

my ($outfile);
my @eintragNeu;
my @gaestebuchNeu;
my $zeile;

my $q = CGI::new();

my $username = $q->param("username");
my $city = $q->param("city");
my $comments = $q->param("comments");
my $homepage = $q->param("homepage");

......

Bisheriger Gästebuchinhalt einlesen in Array gaestebuchinhalt

open(GAESTEBUCH, "< c:/Program Files/Apache Group/Apache/htdocs/krausenet/guestbook/guestbook.htm") || die "Gästebuch konnte nicht geöffnet werden zum Lesen";
my @gaestebuchinhalt = <GAESTEBUCH>;
close(GAESTEBUCH);

Neuer Eintrag einlesen in Array eintragNeu

push (@eintragNeu, "<!-- NEU -->\n");
push (@eintragNeu, "<br>\n");
push (@eintragNeu, "<br>\n");
push (@eintragNeu, "<br>\n");
push (@eintragNeu, "on".$date."<i>".$username."</i>\n");
push (@eintragNeu, "from <i>".$city."</i> left the following note:<p>\n");
push (@eintragNeu, "<i>".$comments."</i>\n");
push (@eintragNeu, "<br>\n");

foreach $zeile (@gaestebuchinhalt)
{if(/^<!-- NEU -->/)
{foreach(@eintragNeu) {push(@gaestebuchNeu,$_);}
push (@gaestebuchNeu, "<!-- NEU -->\n");
}
else
{push(@gaestebuchNeu,$zeile);}
}

open(GAESTEBUCH, ">> c:/Program Files/Apache Group/Apache/htdocs/krausenet/guestbook/guestbook.htm") || die "Gästebuch konnte nicht geöffnet werden zum Schreiben";
print GAESTEBUCH @gaestebuchNeu || die "Schreibvorgang gescheitert";
close(GAESTEBUCH);

................

Gruss
Richard