Also ich verstehe die Kommentare nicht. Gehe aber davon aus, dass sie zum Code passen.
Beispiel aus meiner Kiste (Formularverarbeitung)
else{
# In diesem Block werden die Eingaben gespeichert
# also hier sind alle Pflichtfelder ausgefüllt
# Abschnitte im Template umschalten
$self->{STASH}{pending} = 0;
$self->{STASH}{complete} = 1;
# Link für die Vorschau ins Template setzen
$self->{STASH}{href} = qq($self->{URL}?show=$self->{STASH}{lfdnr});
# Upload, die Bilder kriegen einfach die laufende Nummer
# $self->{STASH}{lfdnr}) ist hier schon zugewiesen
# $updata ist eine Referenz auf alle Daten des hochgeladenen Image
# wenn ein Uplaod anhängig ist
if(my $updata = $self->param('image') ){
my $fh = IO::File->new;
my $filename = $self->eav('uploaddir').'/'.$self->{STASH}{lfdnr};
$fh->open($filename, O_RDWR|O_CREAT|O_BINARY|O_TRUNC) or die $!;
seek($updata->{iohandle}, 0,0);
read($updata->{iohandle}, my $binary, $updata->{content_length});
$fh->print($binary);
$fh->close;
}
# Daten persistent in DAL (Data Access Layer) machen
# Attribut {DAL} wird in sub init{} aggregiert
# Alle Formulareingaben liegen in %hunt
$hunt{time} = time; # Zeitstempel einfügen
$self->{DAL}->checkin($self->{STASH}{lfdnr}, %hunt) or die $@;
$self->{DAL}->write or die $@;
}