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