package Scope; use strict; sub new { return bless [], shift; } sub local { my($self, $var, $value)=@_; push @$self, \$_[1], $var; $_[1]=$value; } sub DESTROY { my($self)=@_; while(@$self) { my $ref=shift @$self; my $val=shift @$self; $$ref=$val; } } 1; __END__ #!/usr/bin/perl -w use strict; use Scope; use vars qw($bar $bif); $bar=1; $bif="naked"; { print "bar=$bar, $bif=$bif\n"; my $s1=new Scope; { $s1->local($bif, 'hello sailor'); local $bar; $s1->local($bar, 42); print "bar=$bar, $bif=$bif\n"; } print "bar=$bar, $bif=$bif\n"; } print "bar=$bar, $bif=$bif\n";