Existe um operador = ~ para corresponder uma string a um padrão. Isso parece funcionar para mim (acho que deveria ser foreach em vez de for):
foreach my $log_file ( @log_files ) {
my $in = $log_file->openr;
while (my $line = <$in>) {
my $string = $line;
if ($line =~ /$pattern/)
{
#| 'grep { $line eq $pattern } '
print "OUT: $string";
}
}
}