in reply to golf anyone? (taking first field)

Here's my shot at it:

use strict; my @list=('xxxxxa : yyyyy blah blah','xxxxxb : yyyyy blah blah',' ', +'xxxxxc : yyyyy blah blah',': this is strange','xxxxxd : yyyyy blah b +lah',"\n",'xxxxxe : yyyyy blah blah'); my @result = map {m/(.*?)\s+:/} @list; print join("\n",@result);

It throws out blank lines, lines with only a trailing newline and lines which start with a colon.

The operative part counts 24 characters.

CountZero

Update:Added ? to make the match non-greedy (see blokhead's remarks)

Update 2:The operative part could be written as
map/(.*?)\s+:/,@list
and is then only 20 characters long.

"If you have four groups working on a compiler, you'll get a 4-pass compiler." - Conway's Law

Replies are listed 'Best First'.
Re: Re: golf anyone? (taking first field)
by blokhead (Monsignor) on Jan 07, 2003 at 07:39 UTC
    On inputs " : space before colon\n" it returns the spaces (minus one), and "xxxxx: no space between data and colon", it returns an empty list.

    blokhead

      By adding a ? to the regex code
      my @result = map {m/(.*?)\s+:/} @list;
      I think it now works:

      • the delimiter is space before colon, hence "xxxxx: no space between data and colon" returns nothing as there is no valid delimiter
      • and on " : space before colon\n" it now returns the empty list as there is a valid delimiter and all spaces are stripped from the result, so nothing remains. Please, note that this is different from having an empty line to start with, which is to be dropped.

      CountZero

      "If you have four groups working on a compiler, you'll get a 4-pass compiler." - Conway's Law