in reply to File reading

If you slurp the file into a string you can use a regular expression look-ahead to make sure the file contains "First Name" and "Last Name" in the right order.

use strict; use warnings; my $fileText; do {local $/; $fileText = <DATA>}; my $rxOK = qr {(?xms) ^First\sName (?=.*?^Last\sName) }; print $fileText =~ $rxOK ? qq{File OK\n} : qq{File BAD\n}; __END__ ..... First Name ..... ..... Last Name .....

This seems to be working for all of the failure cases I can think of. I hope it is of use.

Cheers,

JohnGG

Update: To cope with multiple occurences of "First Name" or "Last Name" in the file you could insert the following after reading the file.

my $fCnt = $fileText =~ /First\sName/g; die qq{"First Name" occurs more than once\n} if $fCnt > 1; my $lCnt = $fileText =~ /Last\sName/g; die qq{"Last Name" occurs more than once\n} if $lCnt > 1;
Update 2: That last update was cobblers, it doesn't work properly. Whoops ;(

Update 3: Should have assigned to a list, not a scalar.

my @fCnt = $fileText =~ /First\sName/g; die qq{"First Name" occurs more than once\n} if @fCnt > 1; my @lCnt = $fileText =~ /Last\sName/g; die qq{"Last Name" occurs more than once\n} if @lCnt > 1;