OK, konnte es jetzt mit eval lösen... keine Ahnung ob das die geschickteste Lösung ist, aber es funkntioniert:
Ja, eval wäre eine Möglichkeit, eine andere wäre Rekursion. Mal ein kleines Beispielscript:
use strict;
use Data::Dumper;
my $str = 'SET_FOO_BAR_BAZ_BUM=42';
my @hks = split /[=_]/, $str;
shift @hks;
my $ref = exec_cmd(\@hks);
print Dumper $ref;
sub exec_cmd {
my $ar = shift;
my $hr = shift || {};
my $key = shift @$ar;
$hr->{$key} = (@$ar == 1 ? $ar->[0] : {});
exec_cmd($ar, $hr->{$key}) if @$ar > 1;
return $hr;
}
Was letztlich performanter ist, habe ich nicht getestet; perliger ist IMO meine Variante.
Siechfred
--
Hinter den Kulissen passiert viel mehr, als man denkt, aber meistens nicht das, was man denkt.
Hinter den Kulissen passiert viel mehr, als man denkt, aber meistens nicht das, was man denkt.