in reply to Re^7: Sort problems
in thread Sort problems

map { my $s = $_; $s =~ s/(?<!\[)(\d+)/ sprintf('%010d%s', length($1), $1) /eg; $s =~ s/(?<=\[)(\d+)/ sprintf('%010d%s', length($1), 4294967296-$1) /eg; [ $_, $s ] } }

Replies are listed 'Best First'.
Re^9: Sort problems
by erez_ez (Acolyte) on Dec 24, 2008 at 10:48 UTC
    Hi ikegami, Thanks again but it didnt succeed in sorting the numbers inside the brackets. This is the result:
    a1_1[2] a1_1[1] a1_1[10] a1_2[2] a1_2[1] a1_2[10] a1_10[2] a1_10[1] a1 +_10[10] a2_1[2] a2_1[1] a2_1[10] a2_2[2] a2_2[1] a2_2[10] a2_10[2] a2 +_10[1] a2_10[10] a10_1[2] a10_1[1] a10_1[10] a10_2[2] a10_2[1] a10_2[ +10] a10_10[2] a10_10[1] a10_10[10]
    It sorts well the "words" but the order inside the brackets for some reason is 2 1 10. Any suggestion? Thanks.
      doh! (?<!\[)(\d+)/ will match "0" in "[10"
      map { my $s = $_; $s =~ s/(?<![\[\d])(\d+)/ sprintf('%010d%s', length($1), $1) /eg; $s =~ s/(?<=\[)(\d+)/ sprintf('%010d%s', length($1), 4294967296-$1) /eg; [ $_, $s ] } }
        Hi ikegami, :) Sorry for bugging you, but it keeps printing 2 1 10. I tried to change the regex in different ways but it didnt work. Any advice?