Good day fellow monks! I have been racking my brains on this one today. Before I ask my question let me show you the list I am trying to crunch:

100!100!key!date!2.. 100!100!key!store! 110!110!P\d\d\d_.*\.\d{6,}\.EMRemr 120!125! 1!yeada 130!132! 140!133! 150!134! 500!blah 160!135!arbor_ama 503!blah 170!136! 505!blah 180!137! 190!138!
All of that is in an array (by line, of course). I need to sort it by the number in the first field delimited by the '!' without actually affecting the elements in the original array.

I don't know *why* I can't think my way through this. Here is what I have tried:

my @array = (all that stuff above); @array = map { $_[0] = (split(/\!/,$_))[0]; } sort { $a <=> $b; } @array;
Which sorts great but it alters the elements in the original array such that all I get returned is the first field delimited by '!'.

The above code returns:

1 100 100 110 120 130 140 150 160 170 180 190 500 503 505

when what I need is:

1 100!100!key!date!2.. 100!100!key!store! 110!110!P\d\d\d_.*\.\d{6,}\.EMRemr 120!125! 130!132! 140!133! 150!134! 160!135!arbor_ama 170!136! 180!137! 190!138! 500!blah 503!blah 505!blah

I know I am missing something. What is it? :) sort{} is still a challenge to me sometimes.

TIA guys!

_ _ _ _ _ _ _ _ _ _
- Jim
Insert clever comment here...


In reply to Sort based on a delimited field in array elements without affecting original array elements by snafu

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.