2

指示に従って 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。モジュールにはTIEHASHサブがあるので、Mooseのものか何かだと思います。Redis::Client::Hash は、Redis::Client をインストールするときに実際にインストールされるため、そこにあるものはすべて問題ないように見えます。Redis::Client::String でも同じようなことが起こるので、TIESCALAR はできません。何か不足していますか?

frido の回答の後、ハッシュ キーが 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";
}

素敵なモジュールのグループをありがとう!

4

1 に答える 1

2

Redis::Clientは、tie モジュールを直接ロードしないため、use最初にそれらをロードする必要があります。

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};

ドキュメントでそれを明確にする必要があるようです。おそらく今週末に新しいリリースを行うことができます。

于 2013-08-14T13:22:39.030 に答える