use Data::Dumper; use Data::Dump::Streamer; $Data::Dumper::Purity=1; my ($x,$y); $x=\$y; $y=\$x; test([$x, $y]); my $ary=[]; $ary->[0]=\$ary->[1]; $ary->[1]=\$ary->[0]; test($ary); sub test { my $VAR1; my $s = shift; my $d = Dumper($s); my $s2 = eval "$d;\$VAR1"; $s->[0]=1; $s2->[0]=1; die $@ if $@; print "original---------------\n"; print Dump($s); print "DDed---------------\n"; print Dump($s2); print "\n" } __END__ original--------------- $ARRAY1 = [ 1, \\do { my $v = 'V: $ARRAY1->[1]' } ]; ${${$ARRAY1->[1]}} = $ARRAY1->[1]; DDed--------------- $ARRAY1 = [ 1, \\do { my $v = 'V: $ARRAY1->[1]' } ]; ${${$ARRAY1->[1]}} = $ARRAY1->[1]; original--------------- $ARRAY1 = [ 1, 'R: $ARRAY1->[0]' ]; $ARRAY1->[1] = \$ARRAY1->[0]; DDed--------------- $ARRAY1 = [ 1, \\do { my $v = 'V: $ARRAY1->[1]' } ]; ${${$ARRAY1->[1]}} = $ARRAY1->[1];