Как сделать мелкую копию хеш-ссылки Perl?

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

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

Ответ 1

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

 my %copy = %$hash;

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

 my $copy = { %$hash };

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