in reply to looking for speed!! large file search and extract

Instead of @required and @all and the foreach:

while (<FH>) { print C $_ if /^abcde.*PARTNAME$/; }
Note that if either "abcde" or "PARTNAME" (or both) are variables, but don't change while reading this particular file, I would compile that regexp once:
my $re = qr/^$start.*$end$/; while (<FH>) { print C $_ if m/$re/; }
Another possible improvement may be to remove the .* and do two matches:
my $startre = qr/^$start/; my $endre = qr/$end$/; while (<FH>) { print C $_ if m/$startre/ and m/$endre/; }
Also, please put your code into <code> and </code> tags - makes it much easier to read. Thanks.