use Tie::Hash::Array; tie my %hash, 'Tie::Hash::Array'; foreach(a..z){ tie my %tmp, 'Tie::Hash::Array'; my $t = $_; foreach my $i(0..5){ $t++; $tmp{$t} = $i; } $hash{$_} = \%tmp; } use Data::Dumper; print Dumper \%hash; untie %hash;