Tie::Hash provides skeletal methods for a hash
Tie::StdHash inherits from Tie::Hash and makes the hash act like your average Perl hash
The package you define just needs to overload the functions that need to act differently than your average hash
So lets write our own Tie::CaseInsensitive class
package Tie::CaseInsensitive; use strict; use Tie::Hash; use vars qw(@ISA); @ISA = qw(Tie::StdHash); sub STORE { my ($self, $key, $value) = @_; return $self->{lc $key} = $value; } sub FETCH { my ($self, $key) = @_; return $self->{lc $key}; } sub EXISTS { my ($self, $key) = @_; return exists $self->{lc $key}; } sub DEFINED { my ($self, $key) = @_; return defined $self->{lc $key}; } 1;
#!/usr/bin/perl use Tie::CaseInsensitive; tie %HASH, 'Tie::CaseInsensitive'; $HASH{BoB} = 1; $HASH{bob} = 2; $HASH{BOb} = 3; print "Here are all the key value pairs\n"; foreach(keys %HASH){ print "$_,$HASH{$_}\n"; }
|
|---|