Предыдущий ответ был рассмотрен способ сделать то, что вы хотите. Однако также имеет смысл объяснить, почему то, что вы пытались сделать, не сработало.
Проблема в том, что синтаксис, используемый для работы с хэшами в Perl, может ввести вас в заблуждение с его простотой по сравнению с фактическим способом работы хеша.
То, что вы видите в коде Perl просто две части информации: ключевой хэш и соответствующее значение хеш-функции: $myHash{$key} = $value;
или даже больше вводит в заблуждение %myHash = ($key => $value);
Однако, как хэши работать, это не просто хранение ключ и значение в виде пары, поскольку приведенный выше код может привести вас к мысли. Вместо этого хеш представляет собой сложную структуру данных, в которой ключ служит входом в адресацию, которая выполняется через формулу (хеш-функцию) и алгоритм (для борьбы с конфликтами) - детали хорошо охвачены на Wikipedia article.
Таким образом, изменение хэш-ключа, как будто это просто значение, недостаточно, потому что то, что хранится в хэше, - это не просто значение - это целая структура данных с адресацией на основе этого значения. Поэтому, когда вы меняете хэш-ключ, он также будет изменять местоположение значения в структуре данных, и сделать это невозможно без удаления старой записи и добавления новой записи под новым ключом, который будет удалять и повторно -введите значение в нужное место.
https://eval.in/469460 –
Его рабочий штраф. Спасибо большое :) Я пытаюсь понять, как он работает. Я не получаю эту строку $ func ->() для @ k2. Покой я понял. Не возражаете ли вы разработать? – Grace90
@ Grace90 это ['модификатор foreach'] (http://perldoc.perl.org/perlsyn.html#Statement-Modifiers); вы также можете написать его как 'for (@ k2) {$ func ->()}'. '$ func' - анонимная функция, которая предоставляется как второй аргумент и работает на' $ _', тем самым изменяя/заменяя все элементы массива '@ k2'. –