package BerkeleyDB::Hash::CasePreserve; use BerkeleyDB; use base qw[ BerkeleyDB::Hash ]; sub FETCH { $_[0]->SUPER::FETCH( lc $_[1] ) } sub EXISTS { $_[0]->SUPER::EXISTS( lc $_[1] ) } sub NEXTKEY { my $next = ""; do { $next = $_[0]->SUPER::NEXT($_[1]); } until 0 < index $next, "_\0_key", - length "_\0_key"; return $_[0]->SUPER::FETCH( $next ); # oRiGiNal cAsE } sub STORE { $_[0]->SUPER::STORE( lc($_[1])."_\0_key", $_[1], ); # oRiGiNaL cAsE return $_[0]->SUPER::STORE( $_[1], $_[2] ); }