Как использовать GDBM в Perl - PullRequest
0 голосов
/ 04 марта 2020

Я новичок в gdbm и хотел бы использовать его в Perl. Я знаю, что Perl поставляется по умолчанию с модулем для этого (GDBM_File). Теперь, когда я пытаюсь выполнить самый простой пример, а именно:

#!/usr/bin/perl

use strict;
use warnings;

use GDBM_File;

my $dbfile = '/tmp/test.gdbm';

my $ok = tie(my %db, 'GDBM_File', $dbfile, &GDBM_WRCREAT, 0664);
die "can't tie to $dbfile for WRCREAT access: $!" unless $ok;

$db{test} = 1;

untie %db;

и выполнить его, я получаю следующее предупреждение:

untie attempted while 1 inner references still exist at ./gdbm-test line 13.

Я читаю документацию perl . * Тем не менее, кажется, что код работает, так как при проверке файла базы данных я получаю правильный результат:

bash$ echo list | gdbmtool /tmp/test.gdbm 
test 1

Почему появляется это предупреждение и как я могу от него избавиться?

1 Ответ

3 голосов
/ 04 марта 2020

Я думаю, что на самом деле это проявление той ошибки, на которую вы указываете. Документация для tie() гласит:

Объект, возвращаемый конструктором, также возвращается функцией t ie

Так ваш $ok содержит ссылку на объект, и вы должны отменить это определение перед вызовом untie().

undef $ok;
untie %db;
...