OK, konnte es jetzt mit eval lösen... keine Ahnung ob das die geschickteste Lösung ist, aber es funkntioniert:
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; $value=~s/"/\\"/g;
foreach $p (@parts)
{
if ($p=~/^\d+$/) { $construct.="{".$p."}"; }
elsif ($p=~/^[a-z0-9_]+$/i) { $construct.="{'".$p."'}"; }
}
eval($construct."=\"".$value."\"");
}
elsif ($cmd=~/SET/i)
{ print STDERR "\nInvalid command syntax: ".$cmd."\n"; }
}
}
}