use strict; use warnings; use Devel::Peek; our ($a, $b, $c); my @fields = qw(a b); print "\nBefore setting a value for \$a:\n"; Dump($a); $a = 'Test'; $b = 'Unused'; print "\nAfter setting a value for \$a:\n"; Dump($a); $c = 'Clobbered'; print "\nAnd \$c is:\n"; Dump($c); print "\nGlobref \*a is:\n"; Dump(*a); { no strict 'refs'; my %tmp; $tmp{$_} = \${$_} for(@fields); print "\nAfter saving references \\\%tmp is:\n"; Dump(\%tmp); *{'a'} = \$c; print "\nAfter aliasing \$a to \$c, \$a is:\n"; Dump($a); print "\nAfter aliasing \$a to \$c, \*a is:\n"; Dump(*a); *{$_} = $tmp{$_} for(@fields); print "\nAfter restoring \*a, \*a is:\n"; Dump(*a); } print "\nFinally, \$a is:\n"; Dump($a);