SDBM_File
СОДЕРЖАНИЕ
- НАЗВАНИЕ
- СИНТАКСИС
- ОПИСАНИЕ
- ЭКСПОРТИРУЕМЫЕ ЭЛЕМЕНТЫ
- ДИАГНОСТИКА
- ПРЕДУПРЕЖДЕНИЕ О БЕЗОПАСНОСТИ
- ОШИБКИ И ПРЕДУПРЕЖДЕНИЯ
НАЗВАНИЕ
SDBM_File — Связывание с файлами формата sdbm
СИНТАКСИС
use Fcntl; # For O_RDWR, O_CREAT, etc.
use SDBM_File;
tie(%h, 'SDBM_File', 'filename', O_RDWR|O_CREAT, 0666)
or die "Couldn't tie SDBM file 'filename': $!; aborting";
# Now read and change the hash
$h{newkey} = newvalue;
print $h{oldkey};
...
untie %h; ОПИСАНИЕ
SDBM_File устанавливает связь между переменной Perl hash и файлом в формате SDBM_File. Вы можете манипулировать данными в файле так, как если бы они находились в переменной Perl hash, но при завершении программы данные останутся в файле для использования при следующем запуске программы.
Связывание
Используйте SDBM_File с встроенной функцией Perl tie, чтобы установить связь между переменной и файлом.
tie %hash, 'SDBM_File', $basename, $modeflags, $perms;
tie %hash, 'SDBM_File', $dirfile, $modeflags, $perms, $pagfilename; $basename — это имя базового файла для базы данных. База данных представляет собой два файла с расширениями ".dir" и ".pag", добавленными к $basename,
$basename.dir (or .sdbm_dir on VMS, per DIRFEXT constant)
$basename.pag Два имени файлов также можно указать полностью как $dirfile и $pagfilename. Это подходит для двух файлов без расширений ".dir" и ".pag", например, для двух файлов из File::Temp.
$modeflags может быть следующими константами из модуля Fcntl (в стиле системного вызова open(2)),
O_RDONLY read-only access
O_WRONLY write-only access
O_RDWR read and write access Если вы хотите создать файл, если он ещё не существует, то выполните побитовое ИЛИ (|) O_CREAT тоже. Если вы опустите O_CREAT и база данных ещё не существует, то вызов tie завершится ошибкой.
O_CREAT create database if doesn't already exist $perms — это биты разрешений файла, которые следует использовать, если создаются новые файлы базы данных. Этот параметр обязателен даже при отсутствии создания новой базы данных. Разрешения будут уменьшены на значение umask пользователя, поэтому типичным значением здесь будет 0666, или, если данные очень конфиденциальные, 0600. (См. "umask" в perlfunc.)
ЭКСПОРТИРУЕМЫЕ ЭЛЕМЕНТЫ
SDBM_File необязательно экспортирует следующие константы:
-
PAGFEXT— расширение, используемое для страницы файла, обычно.pag. -
DIRFEXT— расширение, используемое для каталога файла,.dirповсеместно, но на VMS, где оно.sdbm_dir. -
PAIRMAX— максимальный размер сохранённой записи хэш-таблицы, включая длину ключа и значения.
Эти константы также могут быть использованы с полными именами, например SDBM_File::PAGFEXT.
ДИАГНОСТИКА
При ошибке вызов tie возвращает неопределённое значение и, вероятно, устанавливает $! для указания причины, по которой файл не удалось связать.
sdbm store returned -1, errno 22, key "..." at ...
Это предупреждение выдаётся, когда вы пытаетесь сохранить ключ или значение, длина которых слишком велика. Это означает, что изменение не было записано в базу данных. См. ОШИБКИ И ПРЕДУПРЕЖДЕНИЯ ниже.
ПРЕДУПРЕЖДЕНИЕ О БЕЗОПАСНОСТИ
Не принимайте файлы SDBM из ненадежных источников!
Формат файла sdbm был разработан для скорости и удобства, а не для портативности или безопасности. Злонамеренно созданный файл может привести к аварийному завершению работы Perl или даже к уязвимости безопасности.
ОШИБКИ И ПРЕДУПРЕЖДЕНИЯ
Существует ряд ограничений на размер данных, которые вы можете хранить в файле SDBM. Самое важное — длина ключа плюс длина связанного с ним значения не должна превышать 1008 байт.
См. "tie" в perlfunc, perldbmfilter, Fcntl
© 1993–2021 Larry Wall and others
Licensed under the GNU General Public License version 1 or later, or the Artistic License.
The Perl logo is a trademark of the Perl Foundation.
https://perldoc.perl.org/5.34.0/SDBM_File