Beat: Hash dynaisch erzeugen

Beitrag lesen

ich habe hier Probleme beim verwirklichen

Gz hast vor allem Verständnisprobleme mit
Hashes, Array und deren Referenzen

$var = [1,2]; #weist eine Arrayreferenz zu
$var = {a=>1}; #weist eine Hashreferenz zu

Weise einer Variable immer nur einen Datentyp zu. Mische nicht die Datentypen.

Ich habe ein Hash das Referenzen auf andere Hash besitzt.
Diese Hash sind Speziell (Indexed)

tie my %daten, "Tie::Hash::Indexed" or die $!;
tie my %maschinen, "Tie::Hash::Indexed" or die $!;

my $mem_masch='';

($masch,$varname,$wert) = split(/;/,$_);

if ($mem_masch eq '') { $mem_masch = $masch; }
if ($masch eq $mem_masch)
{
$daten{$masch}{$varname} = $wert;

Hier weist du einen Scalar zu

}
else
{
$maschinen{$counter} = ["foo","bar"];

Hier weist du eine Array-referenz zu.

  $counter++;  
  $daten{$masch} = \$maschinen{$counter};  

ist dasselbe wie
  $daten{$masch} = ["foo","bar"];
Hier weisst du eine Referenz auf den Inhalt, welcher bereits eine Arrayreferenz ist, zu. Schaffst also eine Inkonsistenz.
Entweder ist ein Scalar oder eine Array-Ref-Ref vorhanden.

  $daten{$masch}->{$varname} = $wert;  

Hier aber rechnest du damit dass $daten($masch) eine hashreferenz enthält

  $mem_masch = $masch;  

}

$daten{$masch}->{$varname} = $wert;

  

> Erklärung: wenn $masch sich ändert dann soll ein neues Hash erzeugt werden und dessen Referenz auf das "Haupt" Hash geschreiben werden unter dem key $masch. Das spezielle Hash (Indexed) muss sein, wegen der Reihenfolge.  
>   
> Der Interpreter mault "Not a HASH reference at ...." Zeile ""$daten{$masch}->{$varname} = $wert;""  
  
Ich sehe nicht, was für Daten du speichern willst.  
  
Warum erzeugst du nicht einfach einen Hash. Jeder Maschine wird eine hashreferenz zugewiesen.  
  
$daten{$masch} = {  
     index => $counter,  
     name  => $varname,  
     value => $value,  
     };  
  
Falls du eine neue Maschine anlegst kannst du den bisherigen Index abfragen mit  
my $num\_of\_maschines = scalar keys $daten;  
  
mfg Beat

-- 

><o(((°>           ><o(((°>  

   <°)))o><                     ><o(((°>o  
Der Valigator leibt diese Fische