# Usage: tie($VARIABLE,'TrackScalar', FILE, "\$VARIABLE name/description"); # use TrackScalar; # my $var; # tie($var, 'TrackScalar', 'track.txt', "\$var (keeps count)"); package TrackScalar; use strict; use vars qw($VERSION @ISA); # Get Revision number from RCS ($VERSION = substr(q$Revision: 0.2 $, 10)) =~ s/\s+$//; sub Version {return $VERSION;} use IO::File; # Create tied scalar sub TIESCALAR { my $class = shift; my $log = shift; my $var = shift || "(undefined)"; my $fh = new IO::File ">> $log" or die "Cannot open $log: $!\n"; # Notice that the variable being blessed in the object is # an anonymous hash, and this is tied to the scalar return bless {FH => $fh, VAL => 0, VAR => $var}, $class; } sub FETCH { my $self = shift; my ($package, $filename, $line) = caller(); my $fh = $self->{FH}; print $fh "package $package, ", "$filename line $line FETCHED $self->{VAR}\n"; return $self->{VAL}; } sub STORE { my $self = shift; my $var = shift; my $fh = $self->{FH}; my ($package, $filename, $line) = caller(); print $fh "package $package, ", "$filename line $line changed $self->{VAR} to $var\n"; $self->{VAL} = $var; } sub DESTROY { undef %{$_[0]}; } 1;