http://www.perlmonks.org?node_id=1062160

monkini has asked for the wisdom of the Perl Monks concerning the following question:

I have an array of arrays:

@AoA = ( [ 0.5, "b1", "c0" ], [ 0.4, "b1", "c1" ], [ 0.7, "b2", "c2" ], [ 0.3, "b3", "c3" ], [ 0.6, "b3", "c4" ], );

I would like to sort it on the 1st column (in descending order), and analyze sorted array row by row - if value in the middle column ($b) is duplicate, resample the elements in the row, then sort the remaining rows in array according to the values in 1st column (including the current one) and analyze as before - until all $b's are unique.

How do I sort over the remaining part of array?

my @sorted = sort @AoA; #sort on $a my %seen = (); my $j = 0; while ($j < $#sorted) { my $var = shift; my $b = $var[1]; my $c = $var[2]; if ( ! $seen{$b}++ ) { # $b not seen before DO STH WITH $b AND $c $seen{$b}++; } else { #seen $b before my ($b, $a) = RESAMPLE; # sort remaining array, from now on... and proceed analyzing l +ine by line } }