Hallo,
Also, erstens empfehle ich Dir, etwas an Deinem Stil, Programme zu schreiben, zu verbessern. Versuche konsequent mit EInrückungen zu arbeiten, um dadurch die Struktur des Programmes besser sichtbar zu machen.
Zweintens möchte ich darauf hinweisen, daß es neben if und else auch ein elsif gibt, welches gerade im vorliegenden Fall hervorragend geeignet ist, das auszudrücken, was auch gemeint ist:
if($absenz eq "Kompensation")
{
# hier der eine Code
}
elsif($absenz eq "Eintrag")
{
# hier der andere Code
}
else # das hier fehlt m.E.
{
mache_eine_Fehlermeldung("$absenz hat keinen passenden Wert ($absenz)");
}
So und nun zu drittens:
$add = $dbh->do($db_command);
Überprüfst Du eigentlich, welchen Wert $add hier erhält?
Wenn nein, dann solltest Du das schleunigst nachholen, und im Fehlerfall ($add ist undef), zumindest während der Entwicklungsphase, die Datenbankfehlermeldung $dbh->errstr bzw. den -fehlercode $dbh->err ausgeben. Und sei es nur in einer Log-Datei, dann am besten mit dem SQL-Statement.
Ohne einem guten Errorhandling ist die Fehlersuche meist eine aussichtslose Sache, deshalb bieten fast alle Sprachen (und auch Bibliotheken) entsprechende Mechanismen, und die sollten auch eifrig genutzt werden.
'Literaturhinweise':
perldoc perlstyle
perldoc perlsyn
perldoc DBI
Grüße
Klaus