my %inputdata = ( 'Config->{blah}->{hat}' => "splat", 'Config->{cat}->[0]' => "doh", 'Config->{cat}->[1]' => "ray", ); #### my $evaltext; foreach my $key (keys %inputdata) { $evaltext .= "\$$key = qq~$inputdata{$key}~;\n"; }#foreach eval $evaltext; #### foreach my $key (keys %inputdata) { my @keys = split(/->/, $key); # if ($#keys == 0) { # ${$keys[0]} = $inputdata{$key}; # }#if if ($#keys == 1) { if ($keys[1] =~ /\{/) { $keys[1] =~ s/(\{|\})//g; ${$keys[0]}->{$keys[1]} = $inputdata{$key}; }#if if ($keys[1] =~ /\[/) { $keys[1] =~ s/(\[|\])//g; ${$keys[0]}->[$keys[1]] = $inputdata{$key}; }#if }#if if ($#keys == 2) { if ($keys[1] =~ /\{/) { $keys[1] =~ s/(\{|\})//g; if ($keys[2] =~ /\{/) { $keys[2] =~ s/(\{|\})//g; ${$keys[0]}->{$keys[1]}->{$keys[2]} = $inputdata{$key}; }#if if ($keys[2] =~ /\[/) { $keys[2] =~ s/(\[|\])//g; ${$keys[0]}->{$keys[1]}->[$keys[2]] = $inputdata{$key}; }#if }#if if ($keys[1] =~ /\[/) { $keys[1] =~ s/(\[|\])//g; if ($keys[2] =~ /\{/) { $keys[2] =~ s/(\{|\})//g; ${$keys[0]}->[$keys[1]]->{$keys[2]} = $inputdata{$key}; }#if if ($keys[2] =~ /\[/) { $keys[2] =~ s/(\[|\])//g; ${$keys[0]}->[$keys[1]]->[$keys[2]] = $inputdata{$key}; }#if }#if }#if }#foreach