c:\@Work\Perl\monks>perl -wMstrict -MData::Dump -le "our @A_0; our @A_1; our @A_2; our @A_3; ;; for my $i (0 .. 3) { my $name = qq{A_$i}; no strict 'refs'; $name->[$i] = 1000 + $i; } dd \@A_0; dd \@A_1; dd \@A_2; dd \@A_3; " [1000] [undef, 1001] [undef, undef, 1002] [undef, undef, undef, 1003] #### c:\@Work\Perl\monks>perl -wMstrict -MData::Dump -le "my @A_0; my @A_1; my @A_2; my @A_3; ;; for my $arrayref ( \(@A_0, @A_1, @A_2, @A_3) ) { $arrayref->[0] = 1234; } dd \@A_0; dd \@A_1; dd \@A_2; dd \@A_3; " [1234] [1234] [1234] [1234] #### c:\@Work\Perl\monks>perl -wMstrict -MData::Dump -le "my @arrayrefs = ( \my (@A_0, @foo, @A_2, @A_3) ); ;; for my $i (0 .. $#arrayrefs) { $arrayrefs[$i][$i] = 1000 + $i; } dd \@A_0; dd \@foo; dd \@A_2; dd \@A_3; " [1000] [undef, 1001] [undef, undef, 1002] [undef, undef, undef, 1003] #### c:\@Work\Perl>perl -wMstrict -MData::Dump -le "use 5.012; ;; my @arrayrefs = \my (@A_0, @foo, @A_2, @A_3); ;; while (my ($i, $ar) = each @arrayrefs) { $ar->[$i] = 1000 + $i; } dd \@A_0; dd \@foo; dd \@A_2; dd \@A_3; " [1000] [undef, 1001] [undef, undef, 1002] [undef, undef, undef, 1003]