package Defined;
use strict;
use warnings;
sub TIESCALAR {
my $class = shift;
my $name = shift;
my $self = { 'NAME' => $name,
'DEFINED' => undef, };
return bless ($self, $class);
}
sub FETCH {
my $self = shift;
my $name = $self->{'NAME'};
my @caller = caller;
if (defined $self->{'DEFINED'}) {
print STDERR "@caller -> $name defined\n";
} else {
print STDERR "@caller -> $name undefined\n";
}
}
sub STORE {
my $self = shift;
my $value = shift;
my $name = $self->{'NAME'};
my @caller = caller;
$self->{'DEFINED'} = $value;
print STDERR "@caller -> $name defined with value $value\n";
}
1;
####
#!/usr/bin/perl
use Defined;
use strict;
use warnings;
my $var;
tie $var, 'Defined', '$var';
print $var;
$var = 1;
print $var;
$var = 5
####
bash-3.00$ ./test.pl
main ./test.pl 11 -> $var undefined
main ./test.pl 12 -> $var defined with value 1
main ./test.pl 13 -> $var defined
main ./test.pl 14 -> $var defined with value 5