sub DESTROY { my $self = shift; # Oops! I already destroyed myself return if exists $self->{_PRE_DESTROY}; $self->{_PRE_DESTROY} = 1; # Do whatever your cleanup action is. }