@AoA[0..$#AoA] = sort { $b->[0] <=> $a->[0] } @AoA[0..$#AoA]; my %seen = (); my $j = 0; while ($j < $#AoA) { my $b = $AoA[$j][1]; my $c = $AoA[$j][2]; if ( ! $seen{$b}++ ) { # $b not seen before DO STH WITH $b AND $c $seen{$b}++; } else { #seen $b before my ($b, $a) = RESAMPLE; $AoA[$j][0] = $a; $AoA[$j][1] = '$b'; @AoA[$j..$#AoA] = sort { $b->[0] <=> $a->[0] } @AoA[$j..$#AoA]; } }