NAME
Tie::CPHash - Case preserving but case insensitive hash table
SYNOPSIS
require Tie::CPHash;
tie %cphash, 'Tie::CPHash';
$cphash{'Hello World'} = 'Hi there!';
printf("The key `%s' was used to store `%s'.\n",
tied(%cphash)->key('HELLO WORLD'),
$cphash{'HELLO world'});
DESCRIPTION
The Tie::CPHash provides a hash table that is case preserving but case insensitive. This means that
$cphash{KEY} $cphash{key}
$cphash{Key} $cphash{keY}
all refer to the same entry. Also, the hash remembers which form of the key was last used to store the entry. The keys
and each
functions will return the key that was used to set the value.
An example should make this clear:
tie %h, 'Tie::CPHash';
$h{Hello} = 'World';
print $h{HELLO}; # Prints 'World'
print keys(%h); # Prints 'Hello'
$h{HELLO} = 'WORLD';
print $h{hello}; # Prints 'WORLD'
print keys(%h); # Prints 'HELLO'
The additional key
method lets you fetch the case of a specific key:
# When run after the previous example, this prints 'HELLO':
print tied(%h)->key('Hello');
(The tied
function returns the object that %h
is tied to.)
If you need a case insensitive hash, but don't need to preserve case, just use $hash{lc $key}
instead of $hash{$key}
. This has a lot less overhead than Tie::CPHash.
AUTHOR
Christopher J. Madsen <ac608@yfn.ysu.edu>