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!