#!/usr/bin/perl use strict; use warnings; my %sorthash = (); $sorthash{'10'}{'20'}{1}{2}{3}= '1'; $sorthash{'40'}{'50'}{1}{4}{3}= '4'; $sorthash{'20'}{'30'}{3}{4}{3}= '2'; # Flatten my @flat_array = hash_crawler(\%sorthash); # Sort flat array for my $entry (sort { $a->[3] <=> $b->[3] or $a->[2] <=> $b->[2] } @flat_array) { print join ", ", @$entry; print "\n"; } sub hash_crawler { my ($value, @prefix_array) = @_; my @results = (); if (ref $value) { for (keys %$value) { push @results, hash_crawler($value->{$_},@prefix_array,$_); } } else { push @results, [@prefix_array, $value]; } return @results; }