$string = "(x1,x1)(x2,y2)........(xn,yn)"
####
>perl -wMstrict -le
"my $u =
'(x1,y9)(x11,y8)(x1,y7)(x11,y6)(x2,y5)(x22,y4)(x2,y3)(x22,y2)';
;;
my $s =
join '',
map { $_->[0] }
sort { $a->[1][0] <=> $b->[1][0] || $a->[1][1] <=> $b->[1][1] }
map { [ $_, [ $_ =~ m{\d+}xmsg ]] }
split m{ (?<= \)) (?= \() }xms,
$u
;
;;
print qq{'$s'};
"
'(x1,y7)(x1,y9)(x2,y3)(x2,y5)(x11,y6)(x11,y8)(x22,y2)(x22,y4)'
##
##
>perl -wMstrict -le
"my $u =
'(x1,y9)(x11,y8)(x1,y7)(x11,y6)(x2,y5)(x22,y4)(x2,y3)(x22,y2)';
;;
use constant WIDTH => 10;
my $s =
join '',
map { substr $_, WIDTH+WIDTH }
sort
map { sprintf '%0*4$d%0*4$d%s', m{\d+}xmsg, $_, WIDTH }
split m{ (?<= \)) (?= \() }xms,
$u
;
;;
print qq{'$s'};
"
'(x1,y7)(x1,y9)(x2,y3)(x2,y5)(x11,y6)(x11,y8)(x22,y2)(x22,y4)'