in reply to Re: Pattern Matching With Regular Expressions
in thread Pattern Matching With Regular Expressions

By rewind he means seek FILE, 0, 0, so that the next read is at the beginning of the file.

And by reverse the loops, he means change:

foreach $term (@inputs) { while (<FILE>) {
to
while (<FILE>) { foreach $term (@inputs) {

I'm going to add a few unrelated points:
Always:

use warnings; use strict;
In fact, you probably have a bug of "filenumbers2" vs. "numbers2" that use strict would catch.

Instead of

push @before, split(' ', $`);
you should have
@before = split(' ', $`);
Then you don't need the awkward @before = undef; The same holds for @after, too.

Really it should be

my @before = split /\s+/, $`;
The three lines
@before = reverse(@before); @before = splice(@before, 0, 7); @before = reverse(@before);
are better written as splice(@before, 0, -7);. And this code:
if(exists $results{$number}) { $existing = $results{$number}; $results{$number} = $existing . "... @before" . "<b>$&</b>" . "@afte +r ..."; } else { $results{$number} = "... @before" . "<b>$&</b>" . "@after "; }
can be written as
$results{$number} .= "... @before" . "<b>$&</b>" . "@after ";