Как сделать мелкую копию ссылки на хеш Perl? - PullRequest
11 голосов
/ 09 января 2010

Я хочу отправить ссылку на хеш. Под этим я подразумеваю, что хочу отправить ссылку на новый хеш, который является мелкой копией хеша, который мне дан.

Как мне создать мелкую копию?

1 Ответ

31 голосов
/ 09 января 2010

Просто скопируйте это:

 my %copy = %$hash;

Если вам нужна другая ссылка, просто разверните исходную ссылку в анонимном хеш-конструкторе:

 my $copy = { %$hash };

Для тех, кто интересуется мелкими копиями: такого рода назначение только создает новые значения для клавиш верхнего уровня. Любые значения, которые являются ссылками, останутся теми же ссылками в новом хэше. То есть вы можете заменить значение в новом хеше без изменения исходного хэша. Если вы просто измените значение, например, добавив новый элемент в значение анонимного массива, оба хеша получат изменение, потому что они имеют одну и ту же ссылку. Таким образом, мелкие копии обычно не то, что вы хотите.

...