in reply to Counting words

Here is a regex way to grab the first x words for each line (in my example x=4).
use strict; open (IN,"<in.txt") or die $!; while (<IN>) { print "$1\n" if (/^\s*((?:[^\s]+\s+){4})/); } close(IN);

-jbWare

Replies are listed 'Best First'.
Re^2: Counting words
by zdog (Priest) on Sep 13, 2004 at 15:26 UTC

    I modified your code a little to fit the problem description slightly better:

    use strict; my $num_words = 4; my @words = (); open FILE, "<in.txt" or die $!; while ( <FILE> ) { last if ( push ( @words, m/\s*([^\s]+)\s*/g ) >= $num_words ); } close FILE; print join( " ", @words ) . "\n";

    As a side note, is there a reason to use [^\s] rather than \S, or is it just a matter of preference? Thanks.

    Zenon Zabinski | zdog | zdog@perlmonk.org

      Yeah, "last if" is a good call, I wasn't thinking. The OP wasn't clear exactly how they wanted the results back (string or array of words), so I choose string. Nice convert to array though.

      As far as [^\s] versus \S, force of habit. If my laziness virtue would kick in like its supposed to, I'd have switched to \S by now and saved some keystrokes :)

      -jbWare