Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Вопрос про хеши (DBM если верно)


Автор: DooZ 30.11.2005, 07:43
вопрос такой:
работать с хешем вида:
$hash{'name'}{'icq'}=123;
$hash{'name'}{'tel'}=22488;
$hash{'name'}{'sex'}="m";
просто достаточно

но как мне это записать в DBM файл и потом прочесть оттуда?
в PHP для этого есть функция консервирования и расконсервирования (так помоему), как дела обстоят в Perl ?

Автор: Kiber_rat 30.11.2005, 16:56
Воспользуйся модулем http://search.cpan.org/~chamas/MLDBM-2.01/lib/MLDBM.pm со http://cpan.org:
Код
use MLDBM;                        # this gets SDBM and Data::Dumper
    #use MLDBM qw(SDBM_File Storable);  # SDBM and Storable
    use Fcntl;                          # to get 'em constants
     
    $dbm = tie %o, 'MLDBM', 'testmldbm', O_CREAT|O_RDWR, 0640 or die $!;
    
    $c = [\ 'c'];
    $b = {};
    $a = [1, $b, $c];
    $b->{a} = $a;
    $b->{b} = $a->[1];
    $b->{c} = $a->[2];
    @o{qw(a b c)} = ($a, $b, $c);
    
    #
    # to see what was stored
    #
    use Data::Dumper;
    print Data::Dumper->Dump([@o{qw(a b c)}], [qw(a b c)]);
    
    #
    # to modify data in a substructure
    #
    $tmp = $o{a};
    $tmp->[0] = 'foo';
    $o{a} = $tmp;
    
    #
    # can access the underlying DBM methods transparently
    #
    #print $dbm->fd, "\n";              # DB_File method

Еще один вариант использовать модуль http://search.cpan.org/~ams/Storable-2.15/Storable.pm

Автор: DooZ 30.11.2005, 16:59
ок сенькс

Автор: sharq 30.11.2005, 17:56
DooZ данный вопрос не раз обсуждался здесь, поэтому пользуемся http://forum.vingrad.ru/index.php?act=Search&CODE=show&searchid=99b555d40eb4d2f06bcb6b7f812815ed&search_in=posts&result_type=posts&highlite=dbm.
Обращаем внимание на ответы korob2001. smile

smile

Автор: DooZ 1.12.2005, 03:06
Цитата(sharq @ 30.11.2005, 17:56)
DooZ данный вопрос не раз обсуждался здесь, поэтому пользуемся http://forum.vingrad.ru/index.php?act=Search&CODE=show&searchid=99b555d40eb4d2f06bcb6b7f812815ed&search_in=posts&result_type=posts&highlite=dbm.
Обращаем внимание на ответы korob2001. smile

smile

искал, читал
там нет ответа на мой вопрос =) (кроме того что ответили в данной теме)

Автор: sharq 1.12.2005, 10:45
DooZ если тебе нужно сохранить какую-нибудь структуру данных, а потом восстановить ее, то используй модуль Storable. Это лучший на данный момент вариант.

Код

use Storable 'store', 'retrieve';

my $hash = {
 'key1' => [1,2,3,4,5],
 'key2' => {
   1 => 'hello',
   2 => 'perl',
   ...
 },
 'key3' => 'simple text',
  ...
};

store $hash, 'hash.dump';

...

my $new_hash = retrieve $hash; 


smile

Автор: Kiber_rat 1.12.2005, 13:41
sharq У тебя в 18-й строке обознатушки:
Код
my $new_hash = retrieve('hash.dump');
;)

Автор: sharq 1.12.2005, 16:48
Kiber_rat бывает smile

Код

use Data::Dumper;
use Storable 'retrieve';

my $new_hash = retrieve 'hash.dump'; 
print Dumper $new_hash; # просмотр


smile

Автор: DooZ 1.12.2005, 17:18
спасибо огромное

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)