in reply to Need help modifying parse program.

You have got the "Secondary Sector Informaton" and the "Slot" in there because you're matching everything from "Keep:" to "offset" in your inner while loop, so the first match of $1 in the second block becomes
Phase: 0x7d10 Strength: 31 Secondary Sector Information: Slot 1: Keep: 1 -
I would replace the last while loop with something simpler like
map { if ( $_ =~ m/Keep:\s*(\d+)\s*(Phase|offset):\s*([xabcdef\d]+)\s*St +rength:\s*(\d+)/ ) { print "Keep:${1} - ${2}:${3} - Strength:${4}\n"; } } split /\r\n|\n/, $line;