cosmicperl has asked for the wisdom of the Perl Monks concerning the following question:
Now if I want to load this data it's easy with eval:-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;
It would also quickly break and need to be updated if the data structure became deeper. Feels like brain it's up my a** at the moment, could someone give me a clout and point me onto the right way to do it?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
|
|---|