我正在尝试按照说明使用 Redis::Client::Hash,但通过 ./redishasttest.pl 第 8 行的包“Redis::Client::Hash”不断收到“无法定位对象方法“TIEHASH”。” 这是代码:
#!/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 版本 5.10.1,Redis 2.6.14。我认为这是 Moose 之类的东西,因为该模块有一个 TIEHASH 子。Redis::Client::Hash 实际上是在安装 Redis::Client 时安装的,所以那里的一切看起来都不错。Redis::Client::String 也会发生同样的事情,所以不能 TIESCALAR。我错过了什么吗?
在friedo的回答之后,检查redis中是否设置了哈希键的解决方案是:
#!/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";
}
再次感谢您提供的一组不错的模块!