HerrVogt: Ersetzen

Ich wuensche einen Herzlichen Guten Morgen.

Bin ein kompletter neuling auf dem Gebiet der Programmierung und bereits mein erstes groesseres Program scheint zu scheitern.
Also ich habe eine Datei die gefolgt aufgabaut ist:

Blogeintrag verfasst von Bodo am 11.03.2008
Blogeintrag verfasst von Admin am 12.03.2008
und so weiter ...

Das hab ich mit einem array in eine datei geschrieben.
Ich moechte jetzt den Namen aendern also zum Beispiel Bodo oder Admin. Das schaff ich auch nur mein Program aendert es nicht in der Datei. Ich bin gerade am Firmenrechner koennte also den Code erst heute Abend euch geben aber heute Abend will ich doch schon weitermachen ;-))
Ich kann also nur aus dem Kopf raus einen Code schreiben wie er bei mir zuhause auch UNGEFAEHR ist - der aufbau muesste aber stimmen.

  
#!/usr/bin/perl -w  
  
open ($blog, "<blog.txt");  
while (<$blog>) {  
$verfasser = <>;  
chomp $verfasser;  
if ($blog =~ /$verfasser/) {  
@aenderung = split/ */,$verfasser;  
$ersetzen = <>;  
chomp $ersetzen;  
open ($neu, ">>blog.txt");  
s/$aenderung[3]/$ersetzen/;  
close $neu;  
}  
}  
close $blog;  

Es wird in der Datei einfach nicht geaendert was mache ich falsch?

Bitte um Antwort, Hugo Vogt.

  1. Nicht das ich dir den Elan nehmen will, aber es gibt soviele kostenlose Blogsoftware,.... egal

    Blogeintrag verfasst von Bodo am 11.03.2008
    Blogeintrag verfasst von Admin am 12.03.2008
    und so weiter ...

    Aber das erste, für sowas bietet sich eine Datenbank an mysql sollte bei jedem Hoster im Angebot sein und es erspart dir eine Menge an Programmierarbeit, da du viel an die Datenbank delegieren kannst. Da ist zwar die Hürde, dass du mySql lernen musst, was auch nicht einfach ist, aber es lohnt sich zumal du eine Datenbank nicht nur unter Perl nutzen kannst.

    Ich moechte jetzt den Namen aendern also zum Beispiel Bodo oder Admin. Das schaff ich auch nur mein Program aendert es nicht in der Datei.

    Sowas ist z.b. mit mysql ein Befehl
    UPDATE SET name='Neuer Admin' WHERE name = 'Admin'

    wobei noch viele Fallstricke, die du nicht beachtet hast, vermieden werden.

    #!/usr/bin/perl -w

    Warnungen sind schon gut, aber du solltest auch use strict verwenden, das zwingt dich jede Variabel zu deklarieren, verhindert aber Tippfehler und damit schwer zu findende Fehlerquellen.

    open ($blog, "<blog.txt");

    Hier solltest du deinem Programm die Möglichkeit einbeziehen, das das nicht klappt.

    open ($blog, "<blog.txt") || die "Kann blog.txt nicht öffnen, weil: $!";

    Der restliche Code ist so nicht brauchbar, da du einiges durcheinander wirfst und auch so nicht eine Datei gleichzeitig lesen und schreiben kannst. Dann fehlt ein Lockmechanismus, um zu verhindern das ein anderer Prozess die Datei während der Bearbeitung ändert. So wie du es jetzt machst funktioniert das ganze nur in der Konsole. Und der Ersetzungsausdruck ändert nichts, da du ihn auf keine Variabel anwendest.

    also, wie gesagt überlege dir ob du nicht eine Datenbank verwenden möchtest, es gibt für Perl auch Möglichkeiten wo du keinen Datenbankserver installieren musst, z.b. DBI::CSV

    Struppi.