Your code is clever, and perhaps a bit too clever in the sort{}. This $a =~ /C(\d*)/)[0] generates an intermediate var with the result of the slice. That var will be generated even if we don't give it a name. I would argue to give it a name as that has no run time consequence.

To answer your question re: grep line, see below...just one or 2 chars. /P/ or /P$/. The $ gives the regex engine a clue that the last letter must be 'P'. This construct will run very quickly.

I give kudos to your algorithm. Most of the lines don't have things of interest and you filter to get the lines that are of interest (the ones that end in P). There are fancy sort methods, but if you can select only the lines that have meaning, there is less to sort!

I think something straightforward like this will run well.

#!/usr/bin/perl -w use strict; my @compounds=("C3H8O2", "C6H10O5", "C36H62O31", "C5H16N2", "C10H11N5O6P", "C9H11N3O7P", "C3H9N2O2"); print join("\n", sort{ my ($num_A) = ($a =~ /^C(\d+)/); my ($num_B) = ($b =~ /^C(\d+)/); $num_A <=> $num_B } grep { /P$/ } #could be just /P/? @compounds),"\n"; __END__ C9H11N3O7P C10H11N5O6P

In reply to Re: Condensing a grep into a sort by Marshall
in thread Condensing a grep into a sort by seaver

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.