dbmopenСинтаксисdbmopen HASH, DBNAME, MODE ОписаниеПРИМЕЧАНИЕ В отличие от обычной функции open, первый аргумент не является указателем файла, даже в том случае, если похож на него. Аргумент DBNAME представляет собой имя базы данных без указания расширений .dir или .pag, если они используются. Если такая база данных не существует, она автоматически создается с режимом защиты, указанным аргументом MODE (в соответствии с umask). Если, к несчастью, ваша операционная система поддерживает только старый набор функций DBM, вы можете использовать в вашей программе только один вызов dbmopen. В старых версиях Perl, если ваша система не была оснащена ни DBM, ни ndbm, вызов dbmopen приводил к фатальной ошибке, но в настоящее время производится автоматический откат к базам данных sdbm. Если вы не имеете прав на запись файла DBM, вы можете только считывать хэш-переменные и не сможете присваивать им новые значения. Если вы хотите проверить возможность записи в файл, вы можете использовать проверку прав доступа к файлу либо попытаться создать пустую запись в хэш-массиве внутри блока еval, который локализует ошибку. Обратите внимание, что такие функции, как keys и values, в случае применения их к большим DBM-файлам могут возвращать массивы огромных массивов. Поэтому следует отдавать предпочтение функции each, последовательно просматривающей DBM-файлы. Например: # выводит смещения в файле history dbmopen(%HIST, '/usr/lib/news/history', 0666); while (($key, $val) = each %HIST) { print $key, ' = ', unpack('L',$val), "\n"; } dbmclose(%HIST);
|