while ( @points ) { if (($points[0][0] > $modified[-1][0])^($points[0][1] < $modified[-1][1])) { push @modified, shift @points; } else { shift @points; pop @modified; } }