in reply to Reference Question

That's because you're reusing the same array each time through the loop. There's only one @doc - the one you declared outside the loop. You push a bunch of references to that array onto the @docs list, but since it's the same @doc, they'll all be the same.

Instead, try one of these idioms. My favourite is to just declare @doc inside your loop:

foreach( @doc_nums ) { my @doc;
This will create a new array each time. That allows the push to get a different reference. And since Perl does reference counting right, those arrays, though out of scope at the end of the loop, won't be cleared away because the @docs array still refers to them.

Second option: create a copy of the @doc array, and push that on to the list:

push @docs, [ @doc ];
This will be a bit slower if @doc can be large, but is nice that it's explicitly obvious. That said, the first option is such a common idiom that it's pretty obvious after a while, too.

Hope that helps :-)