perl -e'$_=sprintf("%08b"x12,map hex,"5EE62C8938D2813268509E9B"=~/../g);print sort{(1+chop)*2-3}split"","Puht r arJtel\ncerae on,khs";'

Update to take into account both sorting algorithms:

perl -e'$_=sprintf("%08b"x12,map hex,($]<5.008?"194E8E91CC3A0097991C0350":"5EE62C8938D2813268509E9B")=~/../g);print sort{(1+chop)*2-3}split"","Puht r arJtel\ncerae on,khs";'

Replies are listed 'Best First'.
Re: Abusing sort()
by davidrw (Prior) on Jul 11, 2005 at 19:44 UTC
    I think i see the basic idea, but i get this for output:
    ckPartrao tunhlJe , eehsr
    Update: The above was on This is perl, v5.6.1 built for i386-linux ... I get the correct output on This is perl, v5.8.7 built for MSWin32-x86-multi-thread (activestate build 813).

    Update2: I changed the sort to be: sort{$x=chop;print $x;(1+$x)*2-3} and i get:
    # v5.6.1: 110110010111100100001010000101100100110010000001010010110001 +11001001000100110100011 # v5.8: 1101100101111001000010100001011001001100100000010100101100011100100100 +0100110100011001110111101
    Note that the lengths are different, but they're identical up to that point. Anyone have an explaination?
      This is perl, v5.6.1 built for i386-linux ckPartrao tunhlJe , eehsr
      This is perl, v5.8.1-RC3 built for darwin-thread-multi-2level Just another Perl hacker,
      This is perl, v5.8.4 built for i386-linux-thread-multi Just another Perl hacker,
      Looks like Perl changed sort algorithms between 5.6 and 5.8. Try this on 5.6:
      perl -e'$_=sprintf("%08b"x12,map hex,"194e8e91cc3a0097991c0350"=~/../g +);print sort{(1+chop)*2-3}split"","Puht r arJtel\ncerae on,khs";'
Re: Abusing sort()
by ysth (Canon) on Jul 12, 2005 at 00:36 UTC
    This only works for me on perls >= 5.8.0.

      Hmm, yeah, I'm seeing the same problem on perl 5.6.1; I had only tested this on 5.8.6. Apparently sort() works differently in 5.8.

      This works on 5.6.1:

      perl -e'$_=sprintf("%08b"x12,map hex,"194E8E91CC3A0097991C0350"=~/../g);print sort{(1+chop)*2-3}split"","Puht r arJtel\ncerae on,khs";'