Я хочу продвинуть ссылку на хеш. Этим я подразумеваю, что хочу продвинуть ссылку на новый хеш, который является мелкой копией хеша, который мне дают.
Как я создаю мелкую копию?
Просто скопируйте его:
my %copy = %$hash;
Если вам нужна другая ссылка, просто разверните исходную ссылку в анонимном конструкторе хэша:
my $copy = { %$hash };
Для тех, кто интересуется мелкими копиями: такое присваивание только делает новые значения для ключей верхнего уровня. Любые значения, являющиеся ссылками, по-прежнему будут той же ссылкой в новом хэше. То есть вы можете заменить значение в новом хэше, не изменяя исходный хеш. Если вы просто измените значение, например, вставив новый элемент в значение анонимного массива, оба хэша получат изменение, потому что они используют одну и ту же ссылку. Таким образом, неглубокие копии обычно не то, что вам нужно.