I had to make two changes to get this to work: initialize $data and dereference $ref when pushing the "ARRAY VALUES" value.

Adding the data BrowserUK provided in Re: Need help in building a HofHof...ofA, I ended up with the following:

use strict; use warnings; use Data::Dumper; use Data::Diver qw( DiveRef ); my $data = {}; while (<DATA>) { chomp; my @keys = split /:/; my $val = pop(@keys); my $ref = DiveRef( $data, map \$_, @keys ); push @$$ref, $val; } print Dumper($data); __DATA__ gkey01:key1:1 2 3 4 5 6 7 8 gkey02:key1:key2:key3:1 2 3 4 gkey03:key1:key2:key3:key4:1 2 3 4 5 6 7 8 gkey04:key1:key2:key3:1 2 gkey05:key1:key2:key3:key4:1 2 gkey06:key1:key2:key3:key4:key5:1 2 3 gkey07:key1:key2:1 2 3 4 5 6 7 8 9 gkey08:key1:key2:key3:key4:1 2 3 4 5 6 7 gkey09:key1:1 2 3 4 5 6 7 gkey10:key1:1 2 3 4 5 6 gkey11:key1:1 2 3 4 gkey12:key1:key2:1 2 3 4 5 6 7 8 9 10 gkey13:key1:key2:key3:key4:1 2 3 4 gkey14:key1:key2:key3:1 2 gkey15:key1:1 2 3 4 5 6 7 gkey16:key1:key2:1 gkey17:key1:key2:key3:1 2 3 4 5 6 7 8 9 10 gkey18:key1:key2:1 2 3 4 5 6 7 gkey19:key1:key2:key3:1 2 3 4 5 6 7 8 gkey20:key1:key2:1 2 3 4 5 6 7 8 9

After which it produced:

$VAR1 = { 'gkey17' => { 'key1' => { 'key2' => { 'key3' => [ '1 2 3 4 5 + 6 7 8 9 10' ] } } }, 'gkey11' => { 'key1' => [ '1 2 3 4' ] }, 'gkey01' => { 'key1' => [ '1 2 3 4 5 6 7 8' ] }, 'gkey20' => { 'key1' => { 'key2' => [ '1 2 3 4 5 6 7 8 9' ] } }, 'gkey07' => { 'key1' => { 'key2' => [ '1 2 3 4 5 6 7 8 9' ] } }, 'gkey06' => { 'key1' => { 'key2' => { 'key3' => { 'key4' => +{ + 'key5' => [ + '1 2 3' + ] +} } } } }, 'gkey19' => { 'key1' => { 'key2' => { 'key3' => [ '1 2 3 4 5 + 6 7 8' ] } } }, 'gkey16' => { 'key1' => { 'key2' => [ '1' ] } }, 'gkey10' => { 'key1' => [ '1 2 3 4 5 6' ] }, 'gkey18' => { 'key1' => { 'key2' => [ '1 2 3 4 5 6 7' ] } }, 'gkey04' => { 'key1' => { 'key2' => { 'key3' => [ '1 2' ] } } }, 'gkey03' => { 'key1' => { 'key2' => { 'key3' => { 'key4' => +[ + '1 2 3 4 5 6 7 8' +] } } } }, 'gkey05' => { 'key1' => { 'key2' => { 'key3' => { 'key4' => +[ + '1 2' +] } } } }, 'gkey08' => { 'key1' => { 'key2' => { 'key3' => { 'key4' => +[ + '1 2 3 4 5 6 7' +] } } } }, 'gkey12' => { 'key1' => { 'key2' => [ '1 2 3 4 5 6 7 8 9 10' ] } }, 'gkey14' => { 'key1' => { 'key2' => { 'key3' => [ '1 2' ] } } }, 'gkey13' => { 'key1' => { 'key2' => { 'key3' => { 'key4' => +[ + '1 2 3 4' +] } } } }, 'gkey15' => { 'key1' => [ '1 2 3 4 5 6 7' ] }, 'gkey09' => { 'key1' => [ '1 2 3 4 5 6 7' ] }, 'gkey02' => { 'key1' => { 'key2' => { 'key3' => [ '1 2 3 4' ] } } } };

In reply to Re^2: HoH..oA data structure by ig
in thread HoH..oA data structure by Anonymous Monk

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.