Move the output code inside the @files loop
foreach my $file (@files) {
my @output = ();
print "\n Processing with file $file \n";
open my $fh, '<', $file or die $!;
my $count = 0;
while (<$fh>){
++$count;
# match any keyword
if (/($re)/){
my $kw = $1;
push @output, [$kw,$file,$count,$_];
}
}
close $fh;
# sort by record timestamp
@output = sort { $a->[3] cmp $b->[3]} @output;
#pp \@output;
# output
my $outfile = 'output_'.$file;
print "Check the output generated In file $outfile\n";
open my $fh_out, '>', $outfile or die "$!";
for (@output){
my $kw = $_->[0];
if ( defined $kwhashref->{$kw} ){
print $fh_out "\n*******$kwhashref->{$kw}*******\n";
}
printf $fh_out '%s in file %s, line %d:%s'.$/, @$_;
}
close $fh_out;
}
poj