Это может помочь в терминах адресов памяти, а не имен переменных.
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.
Строка вошла в другое место в памяти.
Вместо этого укажите переменную $a_ref
в ячейке памяти списка @a
. push
влияет на ячейку памяти 123. Поскольку @a
также относится к ячейке памяти 123, ее значение также изменяется.
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.