#!/usr/bin/perl
# your code goes here
my $header = "F=8|A_C=3|A_B=2|D_G_H=11|D_B=2|E=5";
use Data::Dumper;
$Data::Dumper::Deparse = 1;
print Dumper
&unflatten($header);
sub unflatten {
my ($data) = @_;
my @fields = split /\|/, $data; my $result = {};
for my $datum (@fields) {
my ($key, $value) = split /=/, $datum; my $key_is = &processline($key);
#$result->{&processline($key)} = $value;
}
}
sub processline {
my ($key) = @_;
my ($first, $rest) = split /_/, $key, 2; # split key into at most 2 parts if($rest) {
return { $first => &processline($rest) }; # if the key is nested, there will be something in $rest
# so recursively process the smaller $rest, and build up the result hashref
}
else {
#print "first is $first\n";
}
}
IyEvdXNyL2Jpbi9wZXJsCiMgeW91ciBjb2RlIGdvZXMgaGVyZQpteSAkaGVhZGVyID0gIkY9OHxBX0M9M3xBX0I9MnxEX0dfSD0xMXxEX0I9MnxFPTUiOwp1c2UgRGF0YTo6RHVtcGVyOwokRGF0YTo6RHVtcGVyOjpEZXBhcnNlID0gMTsKcHJpbnQgRHVtcGVyICZ1bmZsYXR0ZW4oJGhlYWRlcik7CgpzdWIgdW5mbGF0dGVuIHsKICAgIG15ICgkZGF0YSkgPSBAXzsKICAgIG15IEBmaWVsZHMgPSBzcGxpdCAvXHwvLCAkZGF0YTsKICAgIG15ICRyZXN1bHQgPSB7fTsKCiAgICBmb3IgbXkgJGRhdHVtIChAZmllbGRzKSB7CiAgICAgICAgICAgIG15ICgka2V5LCAkdmFsdWUpID0gc3BsaXQgLz0vLCAkZGF0dW07CiAgICAgICAgICAgIG15ICRrZXlfaXMgPSAmcHJvY2Vzc2xpbmUoJGtleSk7CiAgICAgICAgICAgIHByaW50IER1bXBlciAka2V5X2lzOwogICAgICAgICAgICAjJHJlc3VsdC0+eyZwcm9jZXNzbGluZSgka2V5KX0gPSAkdmFsdWU7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQpzdWIgcHJvY2Vzc2xpbmUgewogICAgbXkgKCRrZXkpID0gQF87CgogICAgbXkgKCRmaXJzdCwgJHJlc3QpID0gc3BsaXQgL18vLCAka2V5LCAyOyAjIHNwbGl0IGtleSBpbnRvIGF0IG1vc3QgMiBwYXJ0cwogICAgaWYoJHJlc3QpIHsKICAgICAgICAgICAgcmV0dXJuIHsgJGZpcnN0ID0+ICZwcm9jZXNzbGluZSgkcmVzdCkgfTsgCiAgICAgICAgICAgICMgaWYgdGhlIGtleSBpcyBuZXN0ZWQsIHRoZXJlIHdpbGwgYmUgc29tZXRoaW5nIGluICRyZXN0CiAgICAgICAgICAgICMgc28gcmVjdXJzaXZlbHkgcHJvY2VzcyB0aGUgc21hbGxlciAkcmVzdCwgYW5kIGJ1aWxkIHVwIHRoZSByZXN1bHQgaGFzaHJlZgogICAgfQogICAgZWxzZSB7CiAgICAJI3ByaW50ICJmaXJzdCBpcyAkZmlyc3RcbiI7CiAgICAgICAgICAgIHJldHVybiAkZmlyc3Q7CiAgICB9Cn0=