Ich kommentiere mal nur einen Abschnitt
if ($Daten{"NAME"})
Hier fragst du, ob $Daten{"NAME"} true ist.
Was aber, wenn der Hashkey "NAME" nicht existiert, dann hast du ihn soeben erzeugt, mit der möglichen Warnung: match auf nicht initialisierte Variable.
if( exists $Daten{"NAME"} )
{
$tNAME = $Daten{"NAME"};
$tNAME =~ m/^((.*?).(.*).(.*))$/;
$TabNAME = $3;
Dein Pattern und deine Zuweisung ist kompliziert und braucht hier eine überflüssige Variable $tName
$1
statt dessen direkte Zuweisung:
Wir verwenden non capturing parantheses (?: )
$Daten{"NAME"} =~ m/^\((?:.*?)\.(?:.*)\.(.*)\)$/
and $TabNAME = $1;
Die Zuweisung ist damit vom Erfolg des Matches abhängig.
Die weiteren Abschnitte sind analog.
if($Daten{"DEFINE"})
Hoffentlich existiert der Schlüssel? Du meinst eher if( exists( ... )){}
lerne das Problem Autovivikation von Hashkeys durch abfragen wie
if ( $Hash{key} )
oder
if ( defined $Hash{key} )
Diese Autovovokation des Keys kann nur verhindert werden durch:
if( exists $Hash{key} )
mfg Beat