モジュールを使用する Perl 結合ハッシュがあり、SDBM_File
値を保存または取得するときに文字エンコーディング変換を行う必要があります。
のドキュメントperldbmfilter
に従いましたが、一般的にはうまくいくようです:ハッシュから結果が期待どおりに適切にエンコードされ、エンコードのバイト値がファイルに保存され、16進エディターを使用してチェックされます。
keys
機能していないのは、 、 またはeach
、または のようなものを使用した、またはData::Dumper
別のハッシュへの単純なコピー操作でさえ、ハッシュのすべての要素に対するあらゆる種類の反復です。
私がいつも得るのは無限再帰です。イテレータが最後に到達しないようeach
です。反復された値を使用して出力すると、それらが繰り返されます。
の使用filter_fetch_key
とそこで行っている文字セット変換の問題を突き止めました。をコメント アウトするfilter_fetch_key
か、フィルター メソッドを変更して just を実行するとreturn shift
、反復が再び機能します。これらのいずれかが私の問題を解決filter_fetch_key
しますが、適切にエンコードされた文字列を発信者に送信するために使用する必要があります。
$dbm->filter_fetch_key (sub { $_ = $self->_normalizeCharset($_); });
sub _normalizeCharset
{
my $self = shift || Carp::croak(...);
#return shift;
return ...::windows2utf(shift);
}
コメントを外すreturn shift
と、反復が機能します。しかし、上記のようにコメントしません。に何が起こるかは何かあると思いますが、指定されたデータをコピーして文字エンコーディングを行うだけ$_
なので、わかりません。windows2utf
これは、キーと値を格納する場合や、値を取得する場合でも同じように機能します。キーのみが問題であり、特定のキーを直接要求する場合ではなく、反復を行う場合のみです。
私が間違っていることについてのヒントはありますか?
スレッドPerlmonks
も付いています。