in reply to Not case sensitive hash?

Use lc or uc. You could use a tied hash, but that might be overkill (see Hash::Case modules).

Replies are listed 'Best First'.
Re: Re: Not case sensitive hash?
by strat (Canon) on Oct 23, 2002 at 10:50 UTC
    A code for a tied hash could look like:

    File TieHashCI.pm:

    package TieHashCI; use Tie::Hash; use vars qw (@ISA); @ISA = qw(Tie::StdHash); #my $exists = 0; sub STORE { my ($self, $key, $value) = @_; return( $self->{ lc $key } = $value ); } sub FETCH { my ($self, $key) = @_; # print ("Fetch $key\n"); return( $self->{ lc $key } ); } sub EXISTS { my ($self, $key) = @_; # $exists++; # print STDOUT ("."); return( exists $self->{ lc $key } ); } sub DEFINED { my ($self, $key) = @_; # print ("Defined $key\n"); return( defined $self->{ lc $key } ); } sub DELETE { my ($self, $key) = @_; # print ("Delete $key\n"); return (delete $self->{ lc $key } ); } # sub CLEAR {} # sub FIRSTKEY{}; # sub NEXTKEY{}; END { # print ("Exists: $exists\n"); } 1;
    and use it in your main program:
    use TieHashCI; my %data = (); tie (%data, 'TieHashCI');
    and then just work with it...

    If TieHashCI.pm is not in your @INC, try something like:

    BEGIN { use FindBin qw($Bin); use lib "$Bin/lib"; # if TieHashCI is in ./lib } # BEGIN use TieHashCI;

    But it wastes lots of ressources...

    Best regards,
    perl -e "s>>*F>e=>y)\*martinF)stronat)=>print,print v8.8.8.32.11.32"