If you want to sort the keys by the numeric value that comes after the literal alpha characters, 'Drive', you could do this:

@array = sort { substr( $a, 5 ) <=> substr ( $b, 5 ) } @array;

That's will tell sort to look at the 6th character (offest 5 from zero) of the key, and everything thereafter, which in your example is a numeric string. Perl coerces the numeric string into a numeric value when used in the context of <=>, if there are no non-number characters present.

That method assumes that 'Drive' always comes first. You'll have to look a little deeper into the perldocs for examples of how to sort by multiple criteria if you want to get more complicated than that.

Update: Looks like Zaxo was a faster typist than I and beat me to the same answer. His makes use of sort's ability to utilize an alternate subname to redefine the comparison mechanism, whereas mine makes use of sort's ability to utilize a block that works as an anonymous subroutine that can redefine the built-in comparison mechanism. Both are essentially the same thing with different presentation in this context.

Dave

"If I had my life to do over again, I'd be a plumber." -- Albert Einstein


In reply to Re: "numeric" sort of keys? by davido
in thread "numeric" sort of keys? by Gorio3721

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.