Have you tried? You need some extra braces in there, and need to drop the second my, but other than that your code works...
my @names = qw(A B C D);
for (my $i=0; $i<4; $i++) {
@{$names[$i]} = $i;
}
use Data::Dumper;
print Dumper(\@A, \@B, \@C, \@D);
These are called symbolic references. It is forbidden by the strict parameter because it's usually a bad idea. That's not to say it's always a bad idea; strict refs is just about the only part of strict that's occasionally worth disabling (occasionally, in a small lexical scope).
There are usually better ways of doing it. Here's one way, using a hash of arrays:
use strict;
my %ARRAYS;
my @names = qw(A B C D);
for (my $i=0; $i<4; $i++) {
@{ $ARRAYS{$names[$i]} } = $i;
}
use Data::Dumper;
print Dumper(@ARRAYS{@names});
Here's another way using hard references instead of symbolic references:
use strict;
my (@A, @B, @C, @D);
my @names = (\@A, \@B, \@C, \@D);
for (my $i=0; $i<4; $i++) {
@{$names[$i]} = $i;
}
use Data::Dumper;
print Dumper(\@A, \@B, \@C, \@D);
perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'
|