{ push @stack,$scalar; $scalar=undef; ... some code... $scalar=shift @stack; } #### package NewStdScalar; require Tie::Scalar; @ISA = qw(Tie::StdScalar); sub FETCH { return ${+shift}++ } package main; tie our $scalar, 'NewStdScalar'; $scalar=0; print $scalar; # 0 { local $scalar="---"; # --- print $scalar; } print $scalar; # 1