use strict; use warnings; use Data::Dumper; use Data::Diver qw( DiveRef ); my $data = {}; while () { 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 #### $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' ] } } } };