#!/usr/bin/perl use strict; use warnings; # 817539 my $pattern = qr/ ^(\d) (?= .* \bfred \s+ (Flintstone) ) (?= .* \bbarney \s+ (Rubble) ) (?= .* \bjoe \s+ (Rockhead) ) /ix; while ( my $line = ) { chomp $line; if ( $line =~ /$pattern/ ) { my $lineno = $1; my $company = join '_', $2, $3, $4, 'inc'; print "$lineno $company \n"; } elsif ( $line =~ /(\d).*/) { my $lineno = $1; print "$lineno, |$line|, does not match\n"; } } __DATA__ 1 bar Fred Flintstone Barney Rubble Joe Rockhead Alfred E Neuman 2 Joe Rockhead AE Neuman baz Fred Flintstone (does not contain name2) 3 Barney Rubble bat Fred Flintstone Joe Rockhead AE Neuman 4 Barney Rubble bat Joe Rockhead AE Neuman Fred Flintstone 5 Joe Jones bar Fred Flintstone Barney Rubble Alfred E Neuman(does not contain Name3) 6 Barney Jones Barney Rubble Joe Rockhead Fred Smith (does not contain Name1 OR Name2) 7 Barney Rubble Fred Flintstone Joe Rockhead 8 Joe Rockhead Fred Flintstone Barney Rubble 9 Joe Rockhead Alfred Flintstone Barney Rubble (has Alfred sted Fred) 0 Joe Rockhead Fred Smith Barney Rubble (has Smith sted Flintstone)