my $ranges = [ { I => "2", }, { I => "3", J => "2", }, { I => "4", J => "3", K => "2", } ]; foreach my $rvarHASH ( @{ $ranges } ) { my @rvarLIST = sort keys %$rvarHASH; my $array; my ($ii,$vi,$ij,$vj,$ik,$vk); if ( scalar @rvarLIST == 1 ) { $ii = $rvarLIST[0]; ## index name $vi = $rvarHASH->{$ii}; ## index value $array->[$vi] = $netlist; } elsif ( scalar @rvarLIST == 2 ) { $ii = $rvarLIST[0]; $vi = $rvarHASH->{$ii}; $ij = $rvarLIST[1]; $vj = $rvarHASH->{$ij}; $array->[$vi]->[$vj] = $netlist; # hardcoded } elsif ( scalar @rvarLIST == 3 ) { $ii = $rvarLIST[0]; $vi = $rvarHASH->{$ii}; $ij = $rvarLIST[1]; $vj = $rvarHASH->{$ij}; $ik = $rvarLIST[2]; $vk = $rvarHASH->{$ik}; $array->[$vi]->[$vj]->[$vk] = $netlist; } else { print "\nmore than 3 dimensions not supported yet \n\n"; }