do I even need Text::CSV for your suggestion? Couldn't the script just put $n lines of text into an array and feed those to @arr_of_data?
Text::CSV will insure you are reading complete records. If you can be sure that your input files have no embedded "new lines" in the CSV records, then you could skip Text::CSV.
And how would I do $csv_obj->print_xml("out.xml") at each iteration without clobbering the previous iteration?
Try (untested):
open(my $outFH, '>', "out.xml");
while (<>) {
...;
$csv_obj->print_xml($outFH);
}