首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Perl中使用gdbm

如何在Perl中使用gdbm
EN

Stack Overflow用户
提问于 2020-03-04 14:02:29
回答 1查看 278关注 0票数 0

我对gdbm很陌生,我想在Perl中使用它。我知道Perl默认附带了该模块(GDBM_File)。现在,当我尝试尽可能简单的例子时,即:

代码语言:javascript
复制
#!/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;

然后执行它,我得到以下警告:

代码语言:javascript
复制
untie attempted while 1 inner references still exist at ./gdbm-test line 13.

我读过perl文档 (请参阅提供的链接中的“解扣”),但这种解释在这里似乎不适用,因为很明显,%db在代码中没有指向它的引用。

尽管如此,代码似乎仍然有效,因为当我检查数据库文件时,我得到了正确的结果:

代码语言:javascript
复制
bash$ echo list | gdbmtool /tmp/test.gdbm 
test 1

为什么会出现这个警告,我该如何处理呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-04 14:18:25

事实上,我认为这是你所指的问题的一种表现。tie()说:

构造函数返回的对象也由tie函数返回。

因此,您的$ok包含对对象的引用,在调用untie()之前应该取消定义。

代码语言:javascript
复制
undef $ok;
untie %db;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60527834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档