my @array = ( {TYPE => "hole", SIZE => 126, STEP => "pcb", COMP => "none"}, {TYPE => "hole", SIZE => 93, STEP => "pcb", COMP => "none"}, {TYPE => "chain", SIZE => 96, STEP => "array", COMP => "right"}, {TYPE => "slot", SIZE => 130, STEP => "panel", COMP => "left"}, ); #### @sorted = sort {$a->{SIZE} <=> $b->{SIZE}} @array; #### my @indices = sort {$hash{SIZE}[$a] <=> $hash{SIZE}[$b]} 0..$#{$hash{SIZE}}; foreach my $key (keys %hash) { @{$hash{$key}} = @{$hash{$key}}[@indices]; # Slice }