- 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]);
+ if ($key=~s/_push$//) {
+ $this->_ours($key,1);
+ return $this->pass("STORE",$key,[@{$this->_normalize($this->pass("FETCH",$key))},$value]);
+ }
+ if ($key=~s/_pop$//) {
+ $this->_ours($key,1);
+ my $val_orig=$this->FETCH($key);
+ for my $vali (reverse 0..$#$val_orig) {
+ next if Data::Compare::Compare($val_orig->[$vali],$value);
+ splice @$val_orig,$vali,1;
+ return $this->pass("STORE",$key,$val_orig);
+ }
+ cluck "value[1] not found in the array[2] of key[0]:\n".Dumper($key,$value,$val_orig);
+ return;
+ }
+ if ($key=~s/_set$//) {
+ $this->_ours($key,1);
+ return $this->pass("STORE",$key,$this->_normalize($value));
+ }
+ $this->_ours($key,0);
+ return $this->pass("STORE",$key,$value);