#!/usr/bin/perl use warnings; use strict; my %colorhash = ( CCgray => ["0","0","0"], CCwhite => ["1","0","0"], CCgrey => ["0","2","0"], CCBlue => ["0","0","3"], ); print "Original order of data:\n\n"; foreach my $colorname (keys %colorhash) { printf "For key %-7s : ",$colorname; for my $i (0.. $#{ $colorhash{$colorname} } ){ print "element[", $i,"] = $colorhash{$colorname}[$i] "; } print "\n"; } print "\n\n"; my @light2dark = sort lightsort (keys %colorhash); my @dark2light = sort darksort (keys %colorhash); print "Order, dark is ",join(',',@dark2light), ".\n"; print "Order, light is ",join(',',@light2dark), ".\n"; sub darksort { $colorhash{$b}[0] <=> $colorhash{$a}[0] or $colorhash{$b}[1] <=> $colorhash{$a}[1] or $colorhash{$b}[2] <=> $colorhash{$a}[2] } sub lightsort { $colorhash{$a}[0] <=> $colorhash{$b}[0] or $colorhash{$a}[1] <=> $colorhash{$b}[1] or $colorhash{$a}[2] <=> $colorhash{$b}[2] } #### C:\Code>perl color-sort.pl Original order of data: For key CCBlue : element[0] = 0 element[1] = 0 element[2] = 3 For key CCgray : element[0] = 0 element[1] = 0 element[2] = 0 For key CCgrey : element[0] = 0 element[1] = 2 element[2] = 0 For key CCwhite : element[0] = 1 element[1] = 0 element[2] = 0 Order, dark is CCwhite,CCgrey,CCBlue,CCgray. Order, light is CCgray,CCBlue,CCgrey,CCwhite.