#! perl -sw use 5.010; use strict; use List::Util qw[ reduce ]; $a = $b; ## disable Name "main::b" used only once: possible typo use Data::Dump qw[ pp ]; my %hash = map{ %{ +reduce{ +{ $b => ref( $a ) ? $a : [ split ' ', $a ] } } reverse split ':', $_ } } ; pp \%hash; __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 #### C:\test>junk3 { 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] } }, }