⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cphash.pm

📁 source of perl for linux application,
💻 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 + -