You have a few options:
I don't know if it matters to you which order you get your matches, nor if the files are small enough, so I'm not sure which option would be better in this case.
Update: You might also want to reformat your code to make it easier to see where each block ends. Running your code through perltidy produces the following:
sub findtext { @filenumbers = @_; foreach $number (@filenumbers) { push @filenumbers2, split(/\W/, $number); } foreach $number (@numbers2) { chomp $number; if (defined $number) { open(FILE, "/home/jroberts/$number.txt") or die "$!"; foreach $term (@inputs) { while (<FILE>) if (/\b($term)\b/i) { push @before, split(' ', $`); @before = reverse(@before); @before = splice(@before, 0, 7); @before = reverse(@before); push @after, split(' ', $'); @after = splice(@after, 0, 7); if (exists $results{$number}) { $existing = $results{$number}; $results{$number} = $existing . "... @before" . "<b>$&</b>" . "@after ..."; } else { $results{$number} = "... @before" . "<b>$&</b>" . "@after "; } @before = undef; @after = undef; next; } else { print "No Match\n"; next; } } print "Match found in $number.txt\n"; @fulltext = $results{$number}; print "@fulltext\n"; close(FILE); } else { next; } next; } }
In reply to Re: Pattern Matching With Regular Expressions
by Paladin
in thread Pattern Matching With Regular Expressions
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |