首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Perl Redis::Client::Hash无法定位对象方法"TIEHASH“

使用Perl Redis::Client::Hash无法定位对象方法"TIEHASH“
EN

Stack Overflow用户
提问于 2013-08-14 15:03:53
回答 1查看 863关注 0票数 2

我正在尝试按照说明使用Redis::Client::Hash,但通过包"Redis::Client::Hash“at ./redishasttest.pl第8行继续得到"Can't locate object method "TIEHASH”。“代码如下:

代码语言:javascript
复制
#!/usr/bin/perl -w

use strict;
use Redis::Client;

my $client = Redis::Client->new;

tie( my %hash, "Redis::Client::Hash", key => 'hello', client => $client);

my @keys = keys %hash;
$hash{foo} = 42;
print 1 if exists $hash{foo};

看起来很简单-- Perl version5.10.1,Redis 2.6.14。我认为这是驼鹿之类的东西,因为模块有一个TIEHASH sub。Redis::Client::Hash实际上是在安装Redis::Client时安装的,所以一切看起来都很好。同样的事情也发生在Redis::Client::String中,所以不能使用TIESCALAR。我是不是遗漏了什么?

在friedo的回答之后,检查是否在redis中设置了散列键的解决方案是:

代码语言:javascript
复制
#!/usr/bin/perl -w

use strict;
use Redis::Client;
use Redis::Client::Hash;
my $key = 'hello';

my $client = Redis::Client->new;

# first make sure hash with key exists
if ($client->type($key) ne "hash") {
    print "$key not a hash\n";
    $client->hmset($key, dummy => 1);
}

tie( my %hash, "Redis::Client::Hash", key => $key, client => $client);

print "KEY     VALUE\n" if %hash > 0;
foreach my $k (keys %hash) {
    print "$k   $hash{$k}\n";
}

再次感谢这组很好的模块!

EN

回答 1

Stack Overflow用户

发布于 2013-08-14 21:22:39

Redis::Client不会直接加载tie模块,所以您只需先use它们即可。

代码语言:javascript
复制
use strict;
use Redis::Client;
use Redis::Client::Hash;  # <---- add this

my $client = Redis::Client->new;

# first create something
$client->hset( 'hello', some => 'thing' );

tie( my %hash, "Redis::Client::Hash", key => 'hello', client => $client);

my @keys = keys %hash;
$hash{foo} = 42;
print 1 if exists $hash{foo};

看起来我需要在文档中澄清这一点。我可能会在这个周末发布一个新的版本。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18225231

复制
相关文章

相似问题

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