in reply to Re: Condensing a grep into a sort
in thread Condensing a grep into a sort

I do see your point (and Johnson's) in that you shouldn't combine grep and sort.

I was writing this code as an example of how you can pass along modified lists without having to create temporary arrays etc. A friend wrote the same in Python (albeit, in a more ugly way, IMO) and I was sure I could emphasise Perl's flexibility by getting the same solution with less code.

I was wondering really, if it was possible to have a regular expression return 'null', in list context, and to have sort somehow not add the null to the sorted list. Does this make sense?

What I'm trying to achieve here, is simply to print out the molecules that have a phosphorus element ('P'), in the order of the number of carbons within the molecule.

Replies are listed 'Best First'.
Re^3: Condensing a grep into a sort
by ikegami (Patriarch) on Jun 09, 2009 at 19:40 UTC

    I was wondering really, if it was possible to have a regular expression return 'null', in list context, and to have sort somehow not add the null to the sorted list. Does this make sense?

    I presume you mean the match operator when you say regular expression.

    And yes, that's possible. The match operator returns an empty list in list context for a failed match.

    $ perl -le'print for map /^foo(.*)/, @ARGV' foobar foobaz dodo bar baz

    The problem isn't what it returns when the match fails, it's what it returns when the match succeeds. You want it to return both the number and the entire string as one value, and that's not going to happen.

Re^3: Condensing a grep into a sort
by jwkrahn (Abbot) on Jun 09, 2009 at 21:09 UTC
    I was wondering really, if it was possible to have a regular expression return 'null', in list context,

    Yes, a regular expression will return 'null' in list context:

    $ perl -le' use Data::Dumper; for ( "C123xyz", "Cklm" ) { push @data, /C(\d*)/, "MARKER"; } print Dumper \@data; ' $VAR1 = [ '123', 'MARKER', '', 'MARKER' ];
    and to have sort somehow not add the null to the sorted list.

    sort does not provide a way to change the size of the list it operates on, so no.