typo fix
[p5sagit/Devel-GlobalDestruction.git] / lib / Devel / GlobalDestruction.pm
index ead681c..2072b3e 100644 (file)
@@ -3,7 +3,7 @@ package Devel::GlobalDestruction;
 use strict;
 use warnings;
 
-our $VERSION = '0.09';
+our $VERSION = '0.11';
 
 use Sub::Exporter::Progressive -setup => {
   exports => [ qw(in_global_destruction) ],
@@ -19,8 +19,9 @@ if (defined ${^GLOBAL_PHASE}) {
 # try to load the xs version if it was compiled
 #
 elsif (eval {
-  require XSLoader;
-  XSLoader::load(__PACKAGE__, $VERSION);
+  require Devel::GlobalDestruction::XS;
+  no warnings 'once';
+  *in_global_destruction = \&Devel::GlobalDestruction::XS::in_global_destruction;
   1;
 }) {
   # the eval already installed everything, nothing to do
@@ -32,10 +33,11 @@ else {
   require B;
   my $started = !B::main_start()->isa(q[B::NULL]);
   unless ($started) {
-    eval 'CHECK { $started = 1 }; 1'
+    # work around 5.6 eval bug
+    eval '0 && $started; CHECK { $started = 1 }; 1'
       or die $@;
   }
-  eval 'sub in_global_destruction () { $started && B::main_start()->isa(q[B::NULL]) }; 1'
+  eval '0 && $started; sub in_global_destruction () { $started && B::main_start()->isa(q[B::NULL]) }; 1'
     or die $@;
 }
 
@@ -46,8 +48,8 @@ __END__
 
 =head1 NAME
 
-Devel::GlobalDestruction - Expose the flag which marks global
-destruction.
+Devel::GlobalDestruction - Provides function returning the equivalent of
+C<${^GLOBAL_PHASE} eq 'DESTRUCT'> for older perls.
 
 =head1 SYNOPSIS
 
@@ -68,7 +70,7 @@ 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 happenning you only need the destructors that free up non
+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
@@ -84,8 +86,8 @@ aliased, etc. if L<Sub::Exporter> is present.
 =item in_global_destruction
 
 Returns true if the interpreter is in global destruction. In perl 5.14+, this
-returns C<${^GLOBAL_PHASE} eq 'DESTRUCT'>, and on earlier perls, it returns the
-current value of C<PL_dirty>.
+returns C<${^GLOBAL_PHASE} eq 'DESTRUCT'>, and on earlier perls, detects it using
+the value of C<PL_main_start> or C<PL_dirty>.
 
 =back