This is patch.2b1f to perl5.002beta1.
[p5sagit/p5-mst-13.2.git] / lib / TieHash.pm
CommitLineData
a0d0e21e 1package TieHash;
2use Carp;
3
4sub new {
4633a7c4 5 my $pkg = shift;
6 $pkg->TIEHASH(@_);
a0d0e21e 7}
8
9# Grandfather "new"
10
11sub TIEHASH {
4633a7c4 12 my $pkg = shift;
13 if (defined &{"{$pkg}::new"}) {
14 carp "WARNING: calling ${pkg}->new since ${pkg}->TIEHASH is missing"
a0d0e21e 15 if $^W;
4633a7c4 16 $pkg->new(@_);
a0d0e21e 17 }
18 else {
4633a7c4 19 croak "$pkg doesn't define a TIEHASH method";
a0d0e21e 20 }
21}
22
23sub EXISTS {
4633a7c4 24 my $pkg = ref $_[0];
25 croak "$pkg doesn't define an EXISTS method";
a0d0e21e 26}
27
28sub CLEAR {
29 my $self = shift;
30 my $key = $self->FIRSTKEY(@_);
31 my @keys;
32
33 while (defined $key) {
34 push @keys, $key;
35 $key = $self->NEXTKEY(@_, $key);
36 }
37 foreach $key (@keys) {
38 $self->DELETE(@_, $key);
39 }
40}
41
748a9306 42# The TieHash::Std package implements standard perl hash behaviour.
43# It exists to act as a base class for classes which only wish to
44# alter some parts of their behaviour.
45
46package TieHash::Std;
47@ISA = qw(TieHash);
48
49sub TIEHASH { bless {}, $_[0] }
50sub STORE { $_[0]->{$_[1]} = $_[2] }
51sub FETCH { $_[0]->{$_[1]} }
52sub FIRSTKEY { my $a = scalar keys %{$_[0]}; each %{$_[0]} }
53sub NEXTKEY { each %{$_[0]} }
54sub EXISTS { exists $_[0]->{$_[1]} }
55sub DELETE { delete $_[0]->{$_[1]} }
56sub CLEAR { %{$_[0]} = () }
57
a0d0e21e 581;