One quick question. As the data needs to be flattened to an array to insert, is there (in the general case) any benefit in using fetchrow_arrayref? I am doing a similar task to the OP, copying entire DB tables. I have used fetchrow_array, then insert the array using a prepared insert. I would benchmark the two, but in my case the fetch is from an well known online service desk tool providing instant gratification ;) and the variance in performance between runs is large enough to mask any difference between fetching @ or \@.
Pereant, qui ante nos nostra dixerunt!