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 :-)
In reply to Re: Reference Question
by Tanktalus
in thread Reference Question
by caseydentinger
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |