package Foo; sub new { my ($class, $params) = @_; my $self = {}; $self->{no_DESTROY} = $params->{no_DESTROY} // 0; bless($self, $class); return $self; } sub DESTROY { my $self = shift; print "in DESTROY, no_DESTROY is $self->{no_DESTROY}\n"; return if $self->{no_DESTROY}; print "DESTROY body is running!\n"; } package main; my $foo = Foo->new({ no_DESTROY => 1 });