Struppi: kein DBM close nach untie ?

Beitrag lesen

ja diese abfrage sollte am anfang sein aber nicht mit if (exists
sondern ich will wissen ob der eintrag nicht existiert.Wär dann if (!exists $hash{$name}) korrekt?

bingo!

Bzw. unless(exists $hash{$name}) (Perl macht Spaß ;-) )

hab ich auch so und am anfang wird es auch geprüft so
if($username eq ''||!$username)
{
exit;
}

Dadurch, dass du erst mit einem String vergleichst erhälst du die Warnung.

In deinem Falle reicht es einfach aus:
if(!$username)
{
exit;
}

und etwas perliger:

exit unless $username;

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.

aha die datei also und nicht den wert bzw. hash in einer datei?!

-e String prüft ob die Datei String existiert.

Du musst nicht prüfen ob der HASH existiert durch tie ist diese quasi in der datei vorhanden und wenn du in ihn vorher deklariert hast ist alles im Lot.

also in meinem fall etwa so?
if(!exists $dbfile{$username})
{
$dbfile{$username} = ("$agent_now*$count_last*$date_today");
}

Fast. Die Klammern erzeugen eine Liste, du wilst aber einen String.

also wie gehabt beim ersten aufruf des scriptes bzw. einem neuen user,wird der eintrag erst am schluss gemacht in die dbfile,

Nein, er wird in dem Augenblick gemacht, wo du auf das Hash zugreifst (das ist die Magie von tie)

was aber dann zur warnung führt weil der hash ja nicht in der dbfile ist.

Doch ist er in dem Momnent wo du ihn tie'st. D.h. wenn du immer noch eine Warnung erhälst muss der Fehler bzw. undefinierte Wert woanders sein.

Struppi.