The attempt to do both on one line just sorts in alphabetical order - it never (usefully) gets to the numerical sort.

You could try reversing the numerical and string comparisons, this will have roughly the right effect, but try it with warnings on and you may not be so amused.

If you are interested, I have an old comparison function that has a significant performance hit, but generally gets the sort order to be what most people expect:

sub smartcomp { my @first = ($a =~ /(\D*)(\d*)/g); my @second = ($b =~ /(\D*)(\d*)/g); while (@first and @second) { my $one = uc shift @first; my $two = uc shift @second; my $cmp = $one cmp $two; return $cmp if $cmp; # Case-insensitive comp on string $one = shift @first; $two = shift @second; $cmp = $one <=> $two; return $cmp if $cmp; # Numerical sort on digits } # Check to see which ran out first. if (@first) { return -1; } elsif (@second) { return 1; } else { # And finally a case-sensitive comparison return ($a cmp $b); } }
This is meant for people who prefer to see "strict.pm" before "Term" and "FAQ_2" before "FAQ_10"...

In reply to Re (tilly) 2: Sorting @_ by tilly
in thread Sorting @_ by vim

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.