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: "
Das ist nicht DIE Quelle. Nihcts gegen Rolf's Seiten, aber es gibt seit einiger Zeit eine neue Version der Berkley DB, aber wie gesagt ich hab keine Anhnung da ich sie nicht mehr nutze.
»
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
Nein, du hast immer noch nicht verstanden.
Angenommen der Eintrag $hash{'name'} existiert nicht.
Dann ruft
if( $hash{'name'} eq 'test')
eine warnung hervor, weil du versuchst auf einen undefinierten wert zu zugreifen,
der eintrag wegblieb.Ich weiss ehrlich gesagt nicht mit welcher methode genau ich die DB datenbank absuchen soll damit was wahr ist.
Wie ich dir schon schribe if( exists $hash{'name'}) prüft ob der schlüssel (also der eintrag) existiert.
Desshalb nehm ich das raus,weil am schluss der eintrag
$dbfile{$username} = ("$agent_now*$count_last*$date_today");
FALSCH!!!!!
%dbfile existiert nicht. In deinem Beipsiel heißt es %hash
Außerdem hast du geprüft ob:
$username
$agent_now
$count_last
$date_today
existieren?
Du kannst die Warnungen auch vermeiden, wenn du bei der Deklaration einen Defaultwert (z.b. einen Leerstring) zuweist.
z.b.
$username = $ENV{HTTP_USER} || '';
jezt kannst du ohne Problem mit $username vergleiche oder verkettungen durchführen und erhälst keine Warnung.
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.
Das eine hat mit dem anderen nichts zu tun und schon gar nicht mit dem was ich dir versuche zu erklären.
-e $var heißt 'existiert die Datei $var ' und das andere: kommt $username nicht in der Spezialvariabel $_ vor.
Ich glaub das ist nicht was du willst.
Wenn du Wissen willst ob eine Varibel einen definierten Wert hat:
if(defined $var) { print "definiert";}
Wen du Wissen willst ob eine Variabel einen definierten Wert der nicht 0 (null) und kein Leerstring ist:
if($var) { print "keine null, kein Leerstring";}
Wenn du Wissen willst ob ein Schlüssel eines Hashes existiert:
if(exists $hash{'key'} { print "Der Schlüssel 'key' existiert";}
Struppi.