#!/usr/bin/perl -w
# File: useEasyHash;
use Tie::Hash;
package EasyHash;
@ISA = ( 'Tie::StdHash' );

sub FETCH {
  my ($hashref, $key) = @_;
  ($realkey) = grep /^$key$/i, keys %$hashref;
  return $realkey ? $hashref->{$realkey} : undef;
}

sub STORE {
  my ($hashref, $key, $value) = @_;
  ($realkey) = grep /^$key$/i, keys %$hashref;
  $key = $realkey if $realkey;
  $hashref->{$key} = $value;
}


package main;

tie %h, 'EasyHash';

$h{Cat} = 'Buzz';
$h{DOG} = 'Fido';
print "$h{cat}, $h{dog}\n";	# Case-neutral FETCH.
$h{cat} = 'Zero';		# Case-neutral STORE assigns $h{Cat}.
print "$h{CAT}, $h{Dog}\n";

foreach $k (keys %h) {
	print "$k => $h{$k}\n";	# Original case preserved.
}

delete $h{cat};		# We didn't implement a (case-neutral) DELETE,
print "$h{cat}\n";	# so the Tie::StdHash->DELETE is used.
delete $h{Cat};		# Have to use the original key.
print "$h{cat}\n";	# Gone now.
