"...this is beyond my abilities at this point..."
Scale the problem back to your actual abilities and start from there. If you are confused by complex regular expressions (like I often am), break the problem down into simpler ones until you are more familiar (note: this example only finds words that are near but appear after your search term):
use strict;
=pod
...if either revenue(s), sales or growth occur within three words of
+the word currency or the phrase "foreign exchange."
=cut
my @sources = ('foreign exchange','currency');
my $sourceData = <<EOF;
foreign exchange revenue wordiness happycat smiles
currency revenue world cat blue runny
a nice happy foreign exchange said that revenues would be up
the day I last visited my foreign exchange they said revenues were goo
+d
wow currency makes good growth
when currency came revenues dipped
EOF
my %searchvector = map {$_=>$_} qw|revenue sales growth|;
my $cntFound = 0;
for (@sources)
{
while($sourceData=~m/$_\s+(\w+)\s*(\w+)?\s*(\w+)?\s*/g) #does the w
+ord appear?
{
# is anything in the searchvector in the found words?
for ($1,$2,$3)
{
my $r = $_;
$r=~s/revenues/revenue/;
if($searchvector{$r}){++$cntFound};
}
}
}
print qq|Total times search (| . (join ' ', (values %searchvector)) .
+') found: ' . $cntFound . qq|\n|;
1;
Total times search (growth sales revenue) found: 6
Celebrate Intellectual Diversity