📄 cphash.pm
字号:
#---------------------------------------------------------------------package Tie::CPHash;## Copyright 1997 Christopher J. Madsen## Author: Christopher J. Madsen <cjm@pobox.com># Created: 08 Nov 1997# $Revision: 5841 $ $Date: 2006-03-21 07:27:29 -0600 (Tue, 21 Mar 2006) $## This program is free software; you can redistribute it and/or modify# it under the same terms as Perl itself.## This program is distributed in the hope that it will be useful,# but WITHOUT ANY WARRANTY; without even the implied warranty of# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See either the# GNU General Public License or the Artistic License for more details.## Case preserving but case insensitive hash#---------------------------------------------------------------------require 5.000;use strict;use vars qw(@ISA $VERSION);@ISA = qw();#=====================================================================# Package Global Variables:$VERSION = '1.02';#=====================================================================# Tied Methods:#---------------------------------------------------------------------# TIEHASH classname# The method invoked by the command `tie %hash, classname'.# Associates a new hash instance with the specified class.sub TIEHASH{ bless {}, $_[0];} # end TIEHASH#---------------------------------------------------------------------# STORE this, key, value# Store datum *value* into *key* for the tied hash *this*.sub STORE{ $_[0]->{lc $_[1]} = [ $_[1], $_[2] ];} # end STORE#---------------------------------------------------------------------# FETCH this, key# Retrieve the datum in *key* for the tied hash *this*.sub FETCH{ my $v = $_[0]->{lc $_[1]}; ($v ? $v->[1] : undef);} # end FETCH#---------------------------------------------------------------------# FIRSTKEY this# Return the (key, value) pair for the first key in the hash.sub FIRSTKEY{ my $a = scalar keys %{$_[0]}; &NEXTKEY;} # end FIRSTKEY#---------------------------------------------------------------------# NEXTKEY this, lastkey# Return the next (key, value) pair for the hash.sub NEXTKEY{ my $v = (each %{$_[0]})[1]; ($v ? $v->[0] : undef );} # end NEXTKEY#---------------------------------------------------------------------# SCALAR this# Return bucket usage information for the hash (0 if empty).sub SCALAR{ scalar %{$_[0]};} # end SCALAR#---------------------------------------------------------------------# EXISTS this, key# Verify that *key* exists with the tied hash *this*.sub EXISTS{ exists $_[0]->{lc $_[1]};} # end EXISTS#---------------------------------------------------------------------# DELETE this, key# Delete the key *key* from the tied hash *this*.# Returns the old value, or undef if it didn't exist.sub DELETE{ my $v = delete $_[0]->{lc $_[1]}; ($v ? $v->[1] : undef);} # end DELETE#---------------------------------------------------------------------# CLEAR this# Clear all values from the tied hash *this*.sub CLEAR{ %{$_[0]} = ();} # end CLEAR#=====================================================================# Other Methods:#---------------------------------------------------------------------# Return the case of KEY.sub key{ my $v = $_[0]->{lc $_[1]}; ($v ? $v->[0] : undef);}#=====================================================================# Package Return Value:1;__END__=head1 NAMETie::CPHash - Case preserving but case insensitive hash table=head1 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'});=head1 DESCRIPTIONThe B<Tie::CPHash> module provides a hash table that is casepreserving 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 ofthe key was last used to store the entry. The C<keys> and C<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 C<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 C<tied> function returns the object that C<%h> is tied to.)If you need a case insensitive hash, but don't need to preserve case,just use C<$hash{lc $key}> instead of C<$hash{$key}>. This has a lotless overhead than B<Tie::CPHash>.=head1 AUTHORChristopher J. Madsen E<lt>F<cjm@pobox.com>E<gt>=cut# Local Variables:# tmtrack-file-task: "Tie::CPHash.pm"# End:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -