Firstly, you can read entire an entire transaction by setting the input record separator ($/, see perlvar). Second, you can use a regular expression with alternation to see if a transaction contains any of the numbers in one fell swoop.
use strict; use warnings; open my $numberFH, q{<}, \ <<EOD or die qq{open: $!\n}; 123456789 567898760 154216722 763498126 EOD chomp( my @numbers = <$numberFH> ); close $numberFH or die qq{close: $!\n}; my $rxFindTrans = do{ local $" = q{|}; qr{(@numbers)}; }; open my $transFH, q{<}, \ <<EOD or die qq{open: $!\n}; some rubbish lines <BEGIN Transaction> blurfl 154876543 <END Transaction> more rubbish <BEGIN Transaction> the one we want 154216722 with more stuff <END Transaction> <BEGIN Transaction> blargh 54211548 <END Transaction> EOD { local $/ = qq{<END Transaction>\n}; while( <$transFH> ) { s{.*(?=<BEGIN Transaction>)}{}s; next unless m{$rxFindTrans}; print qq{Found $1 in:\n$_}; print qq{==================\n}; } } close $transFH or die qq{close: $!\n};
The output.
Found 154216722 in: <BEGIN Transaction> the one we want 154216722 with more stuff <END Transaction> ==================
I hope this is helpful.
Cheers,
JohnGG
In reply to Re: Match a list of numbers from a list of files
by johngg
in thread Match a list of numbers from a list of files
by shawshankred
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |