Just looking briefly at it, the following comes to mind. I'm going to make a bit of an assumption in that you just want to keep a copy of the lines, for processing later.
# $filename is already defined
my (@keptrecords);
open(INFILE, $filename)
or die("Can't open $filename for input: $!\n");
while (my $line = <INFILE>) {
my $tokeep = 0;
my $checkexclusion = 0;
my @parts = split(/,/, $line);
foreach (@parts) {
$checkexclusion++ if ($_ eq '305.1');
$tokeep++ if (( 296.1 <= $_ ) and ( $_ <= 314.0 ));
}
next if (( $checkexclusion ) and ($tokeep <= 1));
push(@keptrecords, $line);
}
Just a thought, based on the idea you presented. Hope that helps....