#! perl -slw use strict; use Data::Dump qw[ pp ]; { package Tie::Scalar::Dynamic; sub TIESCALAR { my( $class, $coderef ) = @_; return bless $coderef, $class; } sub FETCH { my $this = shift; return $this->(); } sub STORE { die 'This tied variable is readonly'; } } my( $ini, $last ) = ( 4, 2 ); my %result = ( SAS1 => 0, SAS2 => 0, SAS3 => 0, ); tie $result{ SAS1 }, 'Tie::Scalar::Dynamic', sub{ $ini - $last }; tie $result{ SAS2 }, 'Tie::Scalar::Dynamic', sub{ $last - $ini }; tie $result{ SAS3 }, 'Tie::Scalar::Dynamic', sub{ $ini - $last }; pp \%result; ( $ini, $last ) = ( 123, -456 ); pp \%result; __END__ c:\test>835979.pl { SAS1 => 2, SAS2 => -2, SAS3 => 2 } { SAS1 => 579, SAS2 => -579, SAS3 => 579 }