Alain: kein DBM close nach untie ?

Beitrag lesen

hi,

dieses $fd = $db->fd;...

Das war das File locking, d.h. wenn du das als CGI skript laufen läßt kann es u.U. sein das mehere Prozesse gleichzeitig auf ein und dieselber Datei zugreifen und dann droht Daten verlust.

Ich bin mir nicht sicher, aber ich glaube neuere Versionen von der Datenbank locken von alleine, wie schon erwähnt such mal danach.

naja dann muss ich eben doch flocken das ganze,obwohl hier http://perlbase.xwolf.de/cgi-bin/perlbase.cgi?display=16&id=15
zwar gesagt wird zitat "Berkeley - DB's sind unempfindlich gegenüber gleichzeitigen Schreibzugriffen mehrerer Prozesse. Trotzdem sollte die Datei
gelockt werden: "
was also heisst dass ich doch locken muss.

ich benötige auch nicht das if(exist $logins{$username... mehr,da der eintrag automatisch erfolgt am schluss.

Das war als Beispiel gedacht, wenn du Wissen willst ob der User existiert. Du musst nämlich aufpassen, wenn du Wissen willst ob ein Eintrag existiert und du es so abfragst:

if( $hash{'name'} ) {.....}

das war ja auch ein problem,das perl den usernamen in der DB datei nie gefunden hat und desshalb das weitere vorgehen blockiert wurde(nur beim ersten mal gings und zwar der neue eintrag,wenn nicht gefunden),somit
der eintrag wegblieb.Ich weiss ehrlich gesagt nicht mit welcher methode genau ich die DB datenbank absuchen soll damit was wahr ist.
Desshalb nehm ich das raus,weil am schluss der eintrag
$dbfile{$username} = ("$agent_now*$count_last*$date_today");
undef $db;
untie (%dbfile);

automatisch erfolgt.

Dann wird automatisch ein (undefinierten) Eintrag mit dem schlüssel 'name' gemacht, was nicht immer gewünscht ist.

D.h. nach der obigen abfrage ist

if(exists $hash{'name'}) => wahr

aber

if(defined $hash{'name'}) => unwahr

Ist halt nur so dass der server mekert mit dem schalter -w ,aber nur beim erstenmal danach nicht mehr.

Die Hinweise vo -w solltest du beseitigen, da sie u.U. zu Effekten führen die nicht von dir gewünscht sind.

ja das mach ich in der regel auch,aber bei diesem fall ist es nicht mehr so wichtig.

wenn du auf eine variabel zugreifen möchtest, soltest du diese vorbelegen oder mit if(defined $var) überprüfen ob sie definiert wurde und schon meckert Perl nicht mehr.

das wollte ich ja mit if (!-e $username ... oder if (!/$username/) aber es geht so nicht weil sich etwas widerspricht.
Gruss
Alain