Чтение и сохранение записей в текстовых файлах
Проблема
Требуется прочитать или сохранить хэш записи в текстовом файле.
Решение
Воспользуйтесь простым форматом, при котором каждое поле занимает отдельную строку вида:
ИмяПоля: Значение
и разделяйте записи пустыми строками.
Комментарий
Если у вас имеется массив записей, которые должны сохраняться в текстовом файле и читаться из
него, воспользуйтесь простым форматом, основанным на заголовках почтовых сообщений. Из-за
простоты формата ключи не могут быть двоеточиями и переводами строк, а значения — переводами строк.
Следующий фрагмент записывает данные в файл:
foreach $record (@Array_of_Records) {
for $key (sort keys %$record) {
print "$Kеу: $record->{$key}\n";
}
print "\n";
}
Прочитать записи из файла тоже несложно:
$/=""; # Режим чтения абзацев
while (<>) {
my @fields = { split /^([^:]+):\s*/m };
shift @fields; # Удалить начальное пустое поле
push (@Array_of_Records, { @fields });
}
Функция split
работает с $_, своим вторым аргументом по умолчанию, в котором находится
прочитанный абзац. Шаблон ищет начало строки (не просто начало записи благодаря /m),
за которым следует один или более символов, не являющихся двоеточиями, затем двоеточие и
необязательный пропуск. Если шаблон split содержит скобки, они возвращаются вместе со значениями.
Возвращаемые, значения заносятся в @fields в порядке «ключ/значение»; пустое поле в начале
убирается. Фигурные скобки в вызове push создают ссылку на новый анонимный хэш, куда копируется
содержимое @fields. Поскольку в массиве сохранился порядок «ключ/значение», мы получаем
правильно упорядоченное содержимое хэша.
См. такжеОписание функции split
Proverte kod v komentariyah gde pro list tam oshibki detskie
Оставить комментарий:
|
|