package TieAccess;
use strict;
use warnings;
use Carp;
use Tie::Scalar;
our @ISA = qw(Tie::StdScalar);
my %instances;
sub TIESCALAR {
my $class = shift;
my $var;
my $self = bless \$var, $class;
$instances{$self} = shift;
carp "\$$instances{$self}: TIESCALAR";
return $self;
}
sub FETCH {
my $self = shift;
carp "\$$instances{$self}: FETCH ${$self}";
return ${$self};
}
sub STORE {
my( $self, $value ) = @_;
${$self} = $value;
carp "\$$instances{$self}: STORE ${$self}";
return ${$self};
}
sub DESTROY {
my $self = shift;
carp "\$$instances{$self}: DESTROY";
delete $instances{$self};
}
1;
package main;
my $variable;
tie $variable, "TieAccess", "variable";
$variable = 100;
print "$variable\n";
####
my $variable = 100
####
my $variable;
tie $variable, "TieAccess", "variable";
$variable = 100;