Frank1985: Hash auf Hash mit eval

Beitrag lesen

»» Moin Moin!
»»
»» »» Hab das Problem jetzt fast gelöst nur geschieht die Zuweisung:
»» »» $testhash{$keywert}={eval $zeile};
»» »» in einer Schleife und darin in einem if else, aber die Werte der Zuweisung scheinen nur in dem Bereich gültig zu sein und nicht global.
»»
»» Sagt Dir XY-Problem irgendetwas?
»»
»» Erkläre Dein eigentliches Problem, dann kannst Du auch eine vernünftige Lösung bekommen. Du baust hier riesige Sicherheitslücken: Was passiert, wenn Du eine Zeile "rm -rf /" bzw. "format c: /q /u" einliest?
»»
»» Alexander

Ich hab schon abgefangen das diese Zeile in diesem Format ist!

Also so sieht es bisher aus:

my %test = ();

my %ergebnis = ();
foreach my $zeile(@array){#@array sind die eingelesenen Zeilen
    if(...){#Prüfung auf richtige Zeile - Art: "name" => "wert"
       %test = eval $zeile;
       $actKey = $test{'name'};
       $ergebnis {$actKey}={eval $zeile};
       print $ergebnis {$actKey}{'name'},"\n"; #Ausgabe des Wert - richtig
    }
    ...
}
while( my ($k, $v) = each %ergebnis) {
   print $ergebnis{$k}{'name'},"\n"; #Problem!
}


> Fehlermeldung:  
> Use of uninitialized value in print at ./mein\_programm line xx.  
>   
> Und diese Line ist das print in der while-Schleife.  
> Auch ein print in anderen if-Anweisungen innerhalb der for-Schleife meldet den selben Fehler.  
>   
> Hoffe das ist genauer - das ist der komplette Code.  
  
Muss wohl noch etwas ergänzen, da ich glaub zu wissen, wo das Problem ist, ich habe weitere elsif die fast den Identischen Code haben nur einen anderen Kopf haben also:  
~~~perl
elsif(...){  
       %test = eval $zeile;  
       $actKey = $test{'name'};  
       $ergebnis {$actKey}={eval $zeile}; <-- Da scheint das Problem zu sein, ich möchte die Hashtable für den selben Key erweitern und da macht er wohl nicht das was ich will.  
       print $ergebnis {$actKey}{'name'},"\n"; #Ausgabe des Wert - richtig  
    }

Grüße