in reply to Regex capture between word and punctuation

Here's what works (note that since you don't need help opening the file, i have included "test.txt" as DATA:

#!/usr/bin/perl -w use strict; while (<DATA>) { if ($_ =~ /\.|\,|\?$/ && $_ =~ /it/) { my @line=split / it /,$_; print "$line[1]"; } } __DATA__ Tim created the Module List in August 1994 and maintained it manually +till April 1996. By that time Andreas had implemented the Perl Authors Uplo +ad Server (PAUSE) and it was happily feeding modules through to the CPAN +archive sites. Since PAUSE held a database of module information which could be maint +ained by module authors it made sense for the module listing part of the Module List to be bui +lt from that database. In April 1996 Andreas took over the automatic post +ing of the Module List and I now maintain the other parts of the text. We pla +n to add value to the automation over time.

Here's why:

  • line 1: note that my perl is in a different place than yours. "perl -w" is use warnings;
  • line 5: uses && to get rid of your nested if. also, i use $/ and not /s (i think this is the same)
  • line 6: split the line into a two array element on " it ", nb. the whitespace deals with "sites"
  • line 7: now just print the second element of the array (first=0, second=1)

    There may be some weakness if you apply this to a different piece of text, but it works on that one (yes, i tested it!)