package OnDestroy; sub say { my ($class, $msg) = @_; bless { msg => $msg }, $class; } sub DESTROY { my ($self) = @_; print $self->{msg}, "\n"; } package main; { my $one = OnDestroy->say("one"); } { my $two = OnDestroy->say("two"); sub closure { my ($four) = @_; my $three = OnDestroy->say("three"); sub { $two = $four } } } my $four = closure(OnDestroy->say("four")); $four->(); # undef $four; print "five\n";