use strict; use warnings; use Tie::IxHash; use Data::Dumper; my %big_hash = ( 'part_1' => tie_me_up(first => 1, second => 2, third => 3), 'part_2' => tie_me_up(foo => 1, bar => 2, baz => 3), 'part_3' => tie_me_up(oranges => 1, apples => 2, lemons => 3), ); print Dumper(\%big_hash); sub tie_me_up { tie my %temp, 'Tie::IxHash'; %temp = @_; return \%temp; } #### $VAR1 = { 'part_2' => { 'foo' => '1', 'bar' => '2', 'baz' => '3' }, 'part_3' => { 'oranges' => '1', 'apples' => '2', 'lemons' => '3' }, 'part_1' => { 'first' => '1', 'second' => '2', 'third' => '3' } };