Лучший способ записать хеш в файл - PullRequest
2 голосов
/ 27 ноября 2010

Согласно документу dbmopen-document эта функция была в значительной степени заменена функцией "tie".Я знаю модуль Tie :: File, который обращается к строкам дискового файла через массив Perl.Как бы я это сделал, если мне нужен не массив, а хеш?

Ответы [ 4 ]

4 голосов
/ 27 ноября 2010

Вы можете использовать Storable :

 use Storable;
 store \%hash, 'file';
 my $hashref = retrieve('file');

или если вам нужно будет хранить больше данных, чем BerkeleyDB :

use BerkeleyDB;
use MLDBM qw(BerkeleyDB::Hash) ;
use Storable;


my $env = BerkeleyDB::Env->new(-Home => $home);
tie %store, 'MLDBM', -env => $env;

$store{my_stored_hash} = \%hash;
2 голосов
/ 30 ноября 2010

SDBM_File модуля ядра может привязать хеш к файлу:

use Fcntl;
use SDBM_File;

tie(%h, 'SDBM_File', 'filename', O_RDWR|O_CREAT, 0666) or die $!;
...
...
untie %h;

Но: «... длина ключа плюс длина его соответствующего значения не может превышать 1008 байт».

1 голос
/ 27 ноября 2010

Посмотрите на стандартный модуль AnyDBM_File и другую документацию, на которую он ссылается, чтобы найти примеры использования tie вместо dbmopen.

0 голосов
/ 27 ноября 2010

Для записи хэша в файл:

open(OUT,">myFile.txt");

foreach my $key (sort keys %hash) {
   print OUT $key.",".$hash{$key}."\n";
}
close(OUT);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...