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

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.

Replies are listed 'Best First'.
Re^10: Sort problems
by ikegami (Patriarch) on Dec 24, 2008 at 17:24 UTC
    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?

        No, I'm the one who wasn't paying enough attention or testing his stuff X_X. I wasn't calculating the right length.

        print("$_\n") for map { $_->[0] } sort { $a->[1] cmp $b->[1] } map { my $s = $_; $s =~ s/(?<![\[\d])(\d+)/ sprintf('%010u%s', length($1), $1) /eg; $s =~ s/(?<=\[)(\d+)/ sprintf('%010u', 4294967296-$1) /eg; [ $_, $s ] } do { local $/; split ' ', <DATA> };

        I tested it this time!