X-Git-Url: https://git.jankratochvil.net/?a=blobdiff_plain;f=Hash%2FPush.pm;fp=Hash%2FPush.pm;h=4e01cba53289ec87922ca6ae034d1d88c9cfaecd;hb=aaa499f21bc074a0f4508963412ea387a811e3e7;hp=0000000000000000000000000000000000000000;hpb=3cff9c1c05e572c0e98c02ffa1aa6c3d2fc4dcf5;p=MyWeb.git diff --git a/Hash/Push.pm b/Hash/Push.pm new file mode 100644 index 0000000..4e01cba --- /dev/null +++ b/Hash/Push.pm @@ -0,0 +1,41 @@ +# $Id$ +# Hash tied to optionally dynamically generate its values +# Copyright (C) 2005 Jan Kratochvil +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; exactly version 2 of June 1991 is required +# +# 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 the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +package My::Hash::Push; +our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; }; +our $CVS_ID=q$Id$; +use strict; +use warnings; +use My::Web; # for &Wrequire +Wrequire 'My::Hash'; +our @ISA=qw(My::Hash); +use Carp qw(cluck confess); + + +sub STORE +{ +my($this,$key,$value)=@_; + + return $this->pass("STORE",$key,$value) if $key!~/_push$/; + my $val_orig=$this->pass("FETCH",$key); + $val_orig=[] if !defined $val_orig; + $val_orig=[$val_orig] if "ARRAY" ne ref $val_orig; + return $this->pass("STORE",$key,[@$val_orig,$value]); +} + +1;