Stefan Welscher: Hash-Struktur dynmisch bilden

Beitrag lesen

Moin moin,
ich hab hier ein Perl-Script in welchem ich alle Variablen zur Erstellung einer Konfiguration in einem Hash %I speichere. Um das Script flexibler zu machen wollte ich dem Benutzer eine Möglichkeit geben, zusätzliche Parameter über die Variable $I{'commands'} zu übertragen (z.B.: SET_INTERFACE_1_IP=1.1.1.1). Diese Variable muss dann in das bestehende Hash eingebracht werden (z.B. $I{'interface'}{1}{'ip'}="1.1.1.1").

Hierzu habe ich eine Funktion geschrieben, die die Referenz auf das Hash übergeben bekommt:

  
  
sub interpret_commands  
{  
 my $I=$_[0];  
 if ($I->{'commands'})  
 {  
  my $cmd;  
  my @commands=split (/[;:,.|]+/,$I->{'commands'});  
  foreach $cmd (@commands)  
  {  
   #SET-Commands  
   if ($cmd=~/^s*SET[_-]([a-z0-9_]+)(-([a-z0-9_]+))?(-([a-z0-9_]+))?(-([a-z0-9_]+))?(-([a-z0-9_]+))?(-([a-z0-9_]+))?(-([a-z0-9_]+))?(-([a-z0-9_]+))?(-([a-z0-9_]+))?(-([a-z0-9_]+))?\s*=\s*(.*?)\s*$/i)  
   {  
    my $construct="I";  
    my @parts=(lc($1),lc($3),lc($5),lc($7),lc($9),lc($11),lc($13),lc($15),lc($17),lc($19));  
    my $value=$20; $value=~s/(^["']|["']$)//g;  
    foreach $p (@parts)  
    {  
     if ($p=~/^\d+$/)     { $construct.="{".$p."}"; }  
     elsif ($p=~/^[a-z0-9_]+$/i) { $construct.="{'".$p."'}"; }  
    }  
    ${$construct}=$value;  
   }  
   elsif ($cmd=~/SET/i)  
   { print STDERR "\nInvalid command syntax: ".$cmd."\n"; }  
  }  
 }  
}  

Das Ergebnis der Variabel $construct ist soweit richtig, aber wie schaffe ich es den Wert in das hash zu übernehmen?

${$construct}=$value; geht nicht
$->{$construct}=$value; bringt Syntaxfehler

Help!