Hallo,
$select = "select zeit_stunden form zeit
where zeit_jahr = '$aktuelles_jahr'
and zeit_monat = '$aktueller_monat'";
my($sollstunden) = $dbh->prepare($select);
Bist Du Dir sicher, ob das auch funktioniert hat?
Es ist besser, wenn Du immer überprüfst, ob Funktionen, die potentiell einen Fehler produzieren können, auch das richtige Ergebnis liefern.
Also mindestens
my($sollstunden) = $dbh->prepare($select) or die "Konnte prepare für '$select' nicht erfolgreich ausführen: $!";
Dann würdest Du auch erkennen, daß am Select-Statement was nicht stimmen kann (form).
$sollstunden->execute();
Auch hier, wie auch bei fetchrow_hashref, eine Fehlerbehandlung einführen.
$sollstunden = $hash_sollstunden->{zeit_monat};
Hmm, ersten wird im Selectstatement 'zeit_monat' nicht mit abgefragt, wahrscheinlich meintest Du 'zeit_stunden'.
Dann sollten IMHO Textkonstanten immer gequotet werden um eventuelle Doppeldeutungen bzw. Seiteneffekte zu vermeiden.
Und außerdem finde ich es problematisch, wenn Du dieselbe Variable für zwei unterschiedliche Bedeutungen verwendest, einmal als Statement-handle, ein anderes mal zur Speicherung der Stunden.
Du solltest Dir daher irgendwas einfallen lassen, um die Bedeutung der Variable bereits am Namen zu erkennen, also z.B.
my $sth_sollstunden = $dbh->prepare($select) or die "Konnte prepare für '$select' nicht erfolgreich ausführen: $!";
my $val_sollstunden = $hash_sollstunden->{'zeit_monat'};
(Irgendwas in der Art, muß ja nicht unbedingt so sein)
Grüße
Klaus