use Data::Dumper; use List::Util 'shuffle'; # randomized list my @a1 = shuffle ( '1,5', '3,9', '3,4', '6,2', '8,1' ); # convert to an array of hashes my @a2 = map { s/,/,y,/; s/\A/x,/; +{ split /,/ } } @a1; # sort 'x' values ascending and 'y' values descending my @a3 = sort { $a->{x} <=> $b->{x} || $b->{y} <=> $a->{y} } @a2; print Dumper \@a3; __END__ $VAR1 = [ { 'y' => '5', 'x' => 1 }, { 'y' => 9, 'x' => 3 }, { 'y' => 4, 'x' => 3 }, { 'y' => '2', 'x' => 6 }, { 'y' => '1', 'x' => 8 } ];