# ... file is opened in handle FH my ($compname, $hdrdata, $tlrdata ); while () { /^HDR(\w+)\s+(\w+)/ && do { $compname=$1; $hdrdata=$2; # handle a header next; }; /^TLR(\d+)/ && do { $tlrdata=$1; # handle a trailer with number=$1 next; }; /^ADD(?:RANGE)?|DELETE(?:RANGE)?/ && do { my ($type,@range_data) = split /,/; my $comp_rec = pop @range_data; if ($comp_name eq $comp_rec ) { # validate record # process type, range data, etc. } else { # error? } next; }; # any other kind of line falls through here # error: ... }