Yes, very possible. Say that you have your names, one per line, in names.txt. You can read them into an array then use join to join the array members into a string separated by the pipe symbol ('|') which is the alternation metacharacter in a regex. Thus your pattern reads match Fred or Joe or ... or Pete. Like this.
use strict;
use warnings;
my $namesFile = q{names.txt};
open my $namesFH, q{<}, $namesFile
or die qq{open: $namesFile: $!\n};
my @names = <$namesFH>;
close $namesFH
or die qq{close: $namesFile: $!\n};
chomp @names; # Remove line terminators
my $namesPatt = join q{|}, @names;
my $dataFile = q{data.txt};
open my $dataFH, q{<}, $dataFile
or die qq{open: $dataFile: $!\n};
while ( <$dataFH> )
{
print qq{Found name $1\n} if /($namesPatt)/;
}
close $dataFH
or die qq{close: $dataFile: $!\n};
Note that I use parentheses in the regex to capture the name matched for later use in $1. I hope this is helpful. Cheers, JohnGG
Update: Corrected poor punctuation/grammar. |