sub lambda { my $f = $_[1]; my $xr = \$_[0]; return sub { local $$xr = $_[0]; return $f->(); } } #### use Data::Alias qw( alias ); use Object::Destroyer qw( ); sub lambda { my $f = $_[1]; my $xr = \$_[0]; return sub { alias my $temp = $$xr; alias $$xr = $_[0]; my $sentry = Object::Destroyer->new( sub { alias $$xr = $temp; } ); return $f->(); } }