# Copyright 2010 Kevin Ryde # This file is part of Chart. # # Chart 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; either version 3, or (at your option) any later version. # # Chart 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 Chart. If not, see . package App::Chart::Tie::GetSetKey; use strict; use warnings; 1; __END__ sub new_ref { my $class = shift; tie (my $tie, @_); return \$tie; } sub TIESCALAR { my ($class, $obj, $key, $newval) = @_; my $oldval = $obj->get($key); my $self = bless [$obj, $key, $oldval], $class; Scalar::Util::weaken ($self->[1]); if (@_ >= 4) { $obj->set($key, $value); } return $self; } sub FETCH { my ($self) = @_; my $obj = $self->[0] || return; return $obj->get($self->[1]); } sub STORE { my ($self, $value) = @_; my $obj = $self->[0] || return; return $obj->set($self->[1], $value); } sub UNTIE { my ($self) = @_; my $obj = $self->[0] || return; return $obj->set($self->[1], $self->[2]); } 1; __END__