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 line by line } }