Mike Mike - 1 year ago 97
Perl Question

Push to array reference

Is it possible to

to an array reference in Perl? Googling has suggested I deference the array first, but this doesn't really work. It pushes to the deferenced array, not the referenced array.

For example,

my @a = ();

my $a_ref = [@a];


print $a[0];

will not be updated and this code will fail because the array is still empty

(I'm still learning Perl references, so this might be an incredibly simple question. Sorry if so)

Answer Source

It might help to think in terms of memory addresses instead of variable names.

my @a = ();       # Set aside memory address 123 for a list.

my $a_ref = [@a]; # Square brackets set aside memory address 456.
                  # @a COPIES the stuff from address 123 to 456.

push(@$a_ref,"hello"); # Push a string into address 456.

print $a[0]; # Print address 123.

The string went into a different memory location.

Instead, point the $a_ref variable to the memory location of list @a. push affects memory location 123. Since @a also refers to memory location 123, its value also changes.

my $a_ref = \@a;       # Point $a_ref to address 123. 
push(@$a_ref,"hello"); # Push a string into address 123.
print $a[0];           # Print address 123.