Поиск

Вопросы и ответы

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

Да. Для этого существует два основных способа. Первый (и довольно неудобный) состоит в форматировании значения элемента в виде обычной записи, например списка с элементами, разделенными запятыми. Для преобразования списка в хэш используется функция join, а при извлечении значения из хэша скаляр разделяется функцией split. Этот метод неудобен и его реализация часто сопровождается ошибками.

Второй способ — использование указателей. Указатели позволяют создавать хэши массивов, хэши хэшей и другие сложные структуры данных. Если вы разберетесь с указателями, вам не составит особого труда создать сложные структуры. Эта тема подробно рассматривается на 13-м занятии, "Структуры и ссылки".

Как можно сохранить ключи в том порядке, в котором они были введены?

Это можно сделать несколькими способами. Первый способ подразумевает, что вы сами должны следить за порядком ввода элементов. Для этого можно использовать специальный массив. При вводе нового элемента в хэш в массив вводится ключ этого элемента с помощью функции push. Если вам потребуется при доступе к хэшу восстановить порядок ввода записей, используйте этот массив, а не функцию keys. Реализовать без ошибок этот метод очень сложно.

Гораздо лучший способ — использовать модуль Tie: :IxHash, который заставляет функцию keys вьводить ключи в порядке ввода их элементов, что вам было и нужно. Подробнее об использовании модулей речь пойдет на 14-м занятии, "Использование модулей".

Существует ли удобный способ записи хэша в файл?

Конечно. Модули Data:: Dumper и Storable могут преобразовать типы данных в скалярные значения, которые можно легко сохранить в текстовом файле. В этих модулях есть функции для обратного преобразования этих скаляров в исходные структуры данных.

На 15-м занятии, "Обработка данных в Perl" будет рассмотрен еще более простой способ записи хэша в файл с использованием DBM-файлов. DBM-файлы позволяют связать хэш с файлом на диске. При изменении хэша будет изменяться и содержимое файла. Таким образом, с помощью файлов на диске можно организовать длительное хранение содержимого хэша.