Perl自作パッケージ(2) Base::Watch

Base::Objectクラスにプロパティを監視する機能を付加するために実装したクラスです。

Perlのtie変数の機能を利用して、変数を監視します。

package Base::Watch;

sub TIESCALAR {
	my $class  = shift;
	my $setter = shift;
	my $getter = shift;
	my $obj    = shift;

	my $self  = {
		object => $obj,
		setter => $setter,
		getter => $getter,
		value  => $value
	};

	return bless $self,$class;
}

sub FETCH {
	my $self = shift;
	my $sub  = $self->{getter};

	return $self->{value} unless $self->{object}->can($sub);

	return $self->{object}->$sub($self->{value});
}

sub STORE {
	my $self  = shift;
	my $value = shift;
	my $sub   = $self->{setter};

	if($self->{object}->can($sub)){
		$value = $self->{object}->$sub($value);
	}

	return $self->{value} = $value;
}

1;
 

Leave a comment