Возможный дубликат:
Каков наилучший способ сделать глубокую копию структуры данных в Perl?
Я, по-видимому, неправильно понимаю что-то о том, как hashrefs работают в Perl, и я здесь, чтобы исправить это.
Мне нужно получить копию hashref, с которой я могу играть без изменения оригинала. Согласно мои исследования, копирование hashref так же просто, как использование оператора equals:
my $hashref_copy = $hashref;
Но насколько я могу судить, все, что делает, это сделать $hashref_copy
указателем на исходный объект. Рассмотрим этот бит игры:
my $hashref = {data => "fish"};
my $hashref_copy = $hashref;
$hashref_copy->{data} = "chips";
print "$hashref->{data}\n";
Если $hashref_copy
действительно была независимой копией, я бы ожидал, что этот код напечатает "рыбу". Вместо этого он печатает "чипы".
Итак, либо 1) я что-то недопонимаю или 2) Perl нарушен. Я совершенно уверен, что это не № 2, несмотря на то, что мое эго могло бы подумать.
Где я ошибаюсь? И что мне нужно сделать, чтобы внести изменения в $hashref_copy
not в исходном $hashref
?