$ perl -Mstrict -Mutf8 -MBerkeleyDB -MEncode -MData::Dumper -le ' unlink "xx.db"; tie my %h, "BerkeleyDB::Btree", -Filename=>"xx.db", -Flags=>DB_CREATE; my $db=tied %h; $Data::Dumper::Useqq=1; $db->filter_fetch_key( sub { warn ">>fetch: ".Dumper($_); $_=decode("utf8", $_); warn "<filter_store_key( sub { warn ">>store: ".Dumper($_); $_=encode("utf8", $_); warn "<>store: $VAR1 = "\x{e4}"; <>fetch: $VAR1 = "\303\244"; <## >>store_key: $VAR1 = "\x{e4}\x{fc}"; <>store_key: $VAR1 = "\x{e4}\x{e4}"; <## >>store_key: $VAR1 = "\x{e4}"; <>fetch_key: $VAR1 = "\x{e4}\x{e4}"; <## my $check=qr/\A\Q$prefix\E(.)?/; $k=$prefix; if( ($rc=$cursor->c_get($k, $v, DB_SET_RANGE))==0 and $k=~$check ) { do { if( defined $1 ) { ... } } while( ($rc=$cursor->c_get($k, $v, DB_NEXT))==0 and $k=~$check ); }