my %hash; while (my ($meas_name,$suffix) = each %data) { while (my ($suffix_name,$corner) = each %$suffix) { while (my ($corner_name,$value) = each %$corner) { push(@{ $hash{$meas_name}{$corner_name} }, $value->{'value'}); } } } while (my ($meas_name,$corner) = each %hash) { while (my ($corner_name,$ary) = each %$corner) { @$ary = sort { $a <=> $b } @$ary; } }