In Perl, you can assign to a variable a reference to another variable, like this:
my @array = (1..10);
my $ref = \@array;
And, as it is a reference, you can do something like this and both variables will be affected:
push @array, 11;
push @$ref, 12;
and both variables will contain 1..12
, because they both point to the same space.
Now, I'd like to know if there is any way you can do the same thing, but starting with a ref and later assigning that reference to a plain variable. For example:
my $ref = [1..12];
my @array = # something here that makes @array point to the same space $ref contains
I know I can just assign it like this:
my @array = @$ref;
but, that's a copy. If I alter $ref or @array, those will be independent changes.
Is there some way to make @array point to the same variable as $ref?
Four ways:
our @array; local *array = $ref;
\my @array = $ref;
(Experimental feature added to 5.22)use Data::Alias; alias my @array = @$ref;
tie my @array, 'Tie::StdArrayX', $ref;
)But of course, the sensible approach is to do
and use
@$array
instead of@array
.Aforementioned Tie::StdArrayX: