#!/usr/bin/perl use Devel::Peek; { package Foo; sub new { my $class = shift; my $val = shift; return bless { thing=>$val }; } sub val { my $self = shift; return "val: " . (++$self->{theVal}); } sub DESTROY { print "destroyed at ", ${shift}->{theVal}, "\n"; } } my $b = [ ]; print "--- before building t ---\n"; Dump($b); my $t = Foo->new($b); print "--- after building t ---\n"; Dump($b); print "--- printing 1 ---\n"; print $t->val(), Dump($b), undef($t), "--- printing 2---\n", Dump($b), ".\n"; print "--- after print ---\n"; Dump($b); #### --- before building t --- SV = RV(0x81df0cc) at 0x81df0c0 REFCNT = 1 FLAGS = (PADMY,ROK) RV = 0x81c1818 SV = PVAV(0x81c286c) at 0x81c1818 REFCNT = 1 FLAGS = () ARRAY = 0x0 FILL = -1 MAX = -1 ARYLEN = 0x0 FLAGS = (REAL) --- after building t --- SV = RV(0x81df0cc) at 0x81df0c0 REFCNT = 1 FLAGS = (PADMY,ROK) RV = 0x81c1818 SV = PVAV(0x81c286c) at 0x81c1818 REFCNT = 2 FLAGS = () ARRAY = 0x0 FILL = -1 MAX = -1 ARYLEN = 0x0 FLAGS = (REAL) --- printing 1 --- SV = RV(0x81df0cc) at 0x81df0c0 REFCNT = 1 FLAGS = (PADMY,ROK) RV = 0x81c1818 SV = PVAV(0x81c286c) at 0x81c1818 REFCNT = 2 FLAGS = () ARRAY = 0x0 FILL = -1 MAX = -1 ARYLEN = 0x0 FLAGS = (REAL) SV = RV(0x81df0cc) at 0x81df0c0 REFCNT = 1 FLAGS = (PADMY,ROK) RV = 0x81c1818 SV = PVAV(0x81c286c) at 0x81c1818 REFCNT = 2 FLAGS = () ARRAY = 0x0 FILL = -1 MAX = -1 ARYLEN = 0x0 FLAGS = (REAL) val: 1--- printing 2--- . destroyed at --- after print --- SV = RV(0x81df0cc) at 0x81df0c0 REFCNT = 1 FLAGS = (PADMY,ROK) RV = 0x81c1818 SV = PVAV(0x81c286c) at 0x81c1818 REFCNT = 1 FLAGS = () ARRAY = 0x0 FILL = -1 MAX = -1 ARYLEN = 0x0 FLAGS = (REAL)