Thank you for your response... I really needed another set of eyes looking at this code since i was just having a fit with it. Your observations are not far off base and I am going to try some of your suggestions...
The reason the code was written the way it was is because I have to report on 4 different aspects of the <OSS> vs the hash or arrays I am comparing it to (failed to mention that earlier) The NULL factors where there because in the report i have to generate they want the fields blank if there is no change to the attribute this was easiest to get a report out to them by yesterday! Now I have some "free" time to clean up the code and work it better... The report I am generating is a CSV file as well and every column needs to match up.
Thank you again for the response and I am going to try some of your suggestions.