Посмотрите на этот кусок кода:
my @arr = (1, 2);
my $ref = \@arr;
my @s = @$ref;
push @s, 4;
print join(", ", @arr) . "\n";
Неожиданно выводится «1, 2». Что случилось? Почему я получил два разных массива (@s is (1,2,4))?
Конечно, я получаю «1, 2, 4», если пишу перед выводом, что-то вроде этого:
$ref = \@s;
@arr = @$ref;
Но это кажется довольно неуклюжим.
Я привык к другим языкам ООП, в которых такого не произошло бы - объект может быть изменен независимо от его ссылок.
Так может кто-нибудь, пожалуйста, помогите мне с этим?