in reply to New to Regex and need help

I'm not sure the regex that you use to match a data line is excatly right, so that may be the problem. To answer the second part, and probably make the overall program easier to debug, I'd do it was if's inside one while loop. I'd also break up the regexps into multiple lines. So you'd have something like this:
if (/^(\d+)\s+ # $1 = CardNo (\d\d\/\d\d)\/ # $2 = MMDD (\d+)\s+ # $3 = YY M=(\d+)\s+(\d+)\s+ # $4 = TotalNo $5 = StormNo SNBR=\s*(\d+)\s+ # $6 = SNBR (.+)\s+ # $7 = Name XING=(\d+)\s+ # $8 = XING SSS=(\d+) # $9 = SSS /x) { # matched the header line my ($CardNo, $MMDD, $YY, $TotalNo, $StormNo, $SNBR, $Name, $XI +NG, $SSS) = ($1, $2, $3, $4, $5, $6, $7, $8, + $9); $Name =~ s/NOT NAMED\s+/NONAME/; # replace and strip trailing +spaces print "$MMDD $TotalNo $Name$StormNo-$YY $XING $SSS $CardNo\n"; next; } if (# regexp for data line.....) ........ }