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:
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.foreach( @doc_nums ) { my @doc;
Second option: create a copy of the @doc array, and push that on to the list:
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.push @docs, [ @doc ];
Hope that helps :-)
|
|---|