Folgender Code bereitet mir Schwierigkeiten:
Ja, einige.
Du wirst ein paar Tage dich daran versuchen, um dann festzustellen, dass es sinnvoller ist Module zu verwenden, weil so viele Fallstricke lauern und du noch soviele andere Sachen lernen musst, dass es Irrsinn wäre sich jede Grundlage selbst zu programmieren.
Eine der wichtigsten und besten Eigenschaften von Perl ist die Modulvielfalt auf CPAN, wer das nicht nutzt, lernt Perl nie.
open(BOOKENTRY, "<public/guest.csv");
Hier fehlt eine Fehlerabfrage, sobald etwas schief läuftt, wirst du wieder Probleme haben, weil du nicht weißt wo, wenn du nicht prüfst ob eine Operation geklappt hat.
flock(BOOKENTRY, LOCK_EX);
dito.
while(! eof(BOOKENTRY)){
üblicherweise sieht eine solche Schleife so aus:
while(<BOOKENTRY>){
chomp;
my $zeile = $_;
Bis hierhin scheint alles zu funktionieren. Öffnen, auslesen, in $zeile packen, aufsplitten, komplette Zeile mit push in das Array @GuestData packen, File schliefßen - fertig.
Wenn du das in einem Skript machst, hast du schon das erste große Problem. Sobald du die Datei geschlossen hast, ist der flock entfernt und ein anderer Prozess kann auf die Datei zugreifen und diese verändern.
Wenn du eine Datei lesen und schreiben willst, musst du die Datei immer während des ganzen Prozesses geöffnet halten.
print BOOKENTRY $name,';',$text1,';',$text2,';',$text3,';',$ENV {'REMOTE_ADDR'},';',$Monatstag,';',$Monat,';',$Jahr,';',$Stunden,';',$Minuten,';',$Sekunden;
Etwas schöner ist hier ein join
print BOOKENTRY join ';', [$name, $text1, $text2, ,$text3, $ENV{REMOTE_ADDR}, $Monatstag, $Monat, $Jahr, $Stunden, $Minuten, $Sekunden];
while(! eof(@GuestData)){
Das ist hier natürlich völliger Unsinn, du willst ja schreiben, also u.U. über das Ende der Datei hinaus schreiben, dieser Aspekt interessiert dich hier nicht.
Wie kann ich ein eingelesenes Array (@GuestData) zeilenweise auslesen und schreiben - wenns geht mit print- bis es leer ist?
Ich glaube Beat hat dir bereits ein Modul genannt, dass das alles macht. Du sparst dir damit viel Arbeit und lernst auch mehr Perl, als so wie du es jetzt machst.
Struppi.