do { my $outer; do { my $inner1; # $inner1 memory is allocated }; # $inner1 memory is released do { my $inner2; # $inner2 memory is allocated $outer = \$inner2; # $outer now references $inner2's memory }; # $inner2 goes out of scope but isn't released - referenced by $outer }; # $outer goes out of scope and is released which also releases memory for $inner2