logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

Devel::GlobalDestruction - Provides function returning the equivalent of "${^GLOBAL_PHASE} eq 'DESTRUCT'"

Authors

       Yuval Kogman <nothingmuch@woobling.org>

       Florian Ragwitz <rafl@debian.org>

       Jesse Luehrs <doy@tozt.net>

       Peter Rabbitson <ribasushi@cpan.org>

       Arthur Axel 'fREW' Schmidt <frioux@gmail.com>

       Elizabeth Mattijsen <liz@dijkmat.nl>

       Greham Knop <haarg@haarg.org>

Description

       Perl's global destruction is a little tricky to deal with WRT finalizers because it's not ordered and
       objects can sometimes disappear.

       Writing defensive destructors is hard and annoying, and usually if global destruction is happening you
       only need the destructors that free up non process local resources to actually execute.

       For these constructors you can avoid the mess by simply bailing out if global destruction is in effect.

Exports

       This module uses Sub::Exporter::Progressive so the exports may be renamed, aliased, etc. if Sub::Exporter
       is present.

       in_global_destruction
           Returns   true   if   the  interpreter  is  in  global  destruction.  In  perl  5.14+,  this  returns
           "${^GLOBAL_PHASE} eq 'DESTRUCT'", and on earlier perls, detects it using the value of "PL_main_cv" or
           "PL_dirty".

Name

       Devel::GlobalDestruction - Provides function returning the equivalent of "${^GLOBAL_PHASE} eq 'DESTRUCT'"
       for older perls.

Synopsis

           package Foo;
           use Devel::GlobalDestruction;

           use namespace::clean; # to avoid having an "in_global_destruction" method

           sub DESTROY {
               return if in_global_destruction;

               do_something_a_little_tricky();
           }

See Also