Neben dem was Colocybe dir schon gezeigt hat...
use Fcntl ':flock'; #hier wird eingelesen ob das zu schreibende schon vorhanden ist
Das einbinden der Module ist übersichtlicher (IMHO) wenn man es am Anfang des Skriptes macht.
$Zugriffe = 0;
Du solltest DRINGEND use strict verwenden, da das dich gerade in der Entwicklungphase vor vielen vielen Fehlern bewahrt und dir beim Debuggen sehr hilft.
Außerdem sollten Variabeln nicht mit einem Großbuchstaben beginnen http://perldoc.com/perl5.8.0/pod/perlstyle.html
open(DATEN,"<$logfile") || &Dead('Cannot open file');
Hier kannst du deiner Fehlerroutine noch $! mitgeben, dann weißt du auch warum dein Programm sterben musste.
/$etwas_geschriebenes/ ? $Zugriffe = $Zugriffe + 1 : $Zugriffe = $Zugriffe;
Das hatten wir doch letztens erst:
Besser so:
$Zugriffe = /$etwas_geschriebenes/ ? $Zugriffe + 1 : $Zugriffe;
}
if ($Zugriffe >= 1) #wenn es vorhanden ist
{
&Dead(); #dann verlasse den weiteren vorgang
}
else
{
close (DATEN);##hier ist das problem,wo ein zweiter zugriff der die daten wieder einliest,
den weiteren vorgang stören könnte bzw. die daten dann nochmals schreibt,
weil er in dem moment bevor er die daten schreibt ja schon einliest
und nicht weiss dass die daten bereits geschrieben wurden.##
Das verstehe ich nicht. du flockst doch oben deine Datei, also kann kein zweiter Vorghang die Datei lesen/schreiebn (LOCK_EX = exklusiv).
open(DATEN,">>$logfile") || &Dead('Cannot open file'); #ansonsten schreibe den text in die log
flock(DATEN,LOCK_EX);
print DATEN "$etwas_geschriebenes\n";
close (DATEN);
&email();
}
}
Wenn du allerdings meinst, dass das im gleichen Programm passiert, dann musst du die Datei immer zum lesen+schreiben öffnen.
Auch wenn's komplizierter ist, aber das ist CGI ;-)
Struppi.