sub import {
shift;
- my %args = @_;
- my $level = $args{level} || 1;
+ my %args = @_;
- if ("$]" < 5.013_004 and not $ENV{PERL_VARIABLE_MAGIC_TEST_THREADS}) {
+ my $level = $args{level};
+ $level = 1 unless defined $level;
+
+ if ("$]" < 5.013_004 and not $ENV{PERL_FORCE_TEST_THREADS}) {
_diag("perl 5.13.4 required to safely test global destruction");
- return;
+ return 0;
+ }
+
+ my $env_level = $ENV{PERL_DESTRUCT_LEVEL};
+ if (defined $env_level) {
+ no warnings 'numeric';
+ $env_level = int $env_level;
}
- my $env_level = int($ENV{PERL_DESTRUCT_LEVEL} || 0);
- if ($env_level >= $level) {
- my $is_debugging = is_debugging_perl();
- require Test::More;
- if ($is_debugging) {
- _diag("Global destruction level $env_level set by PERL_DESTRUCT_LEVEL (debugging perl)");
- return;
+ my $is_debugging = is_debugging_perl();
+ if ($is_debugging) {
+ if (defined $env_level) {
+ _diag("Global destruction level $env_level set by PERL_DESTRUCT_LEVEL (environment)");
+ return ($env_level >= $level) ? 1 : 0;
} else {
- _diag("PERL_DESTRUCT_LEVEL is set to $env_level, but this perl doesn't seem to have debugging enabled");
+ $ENV{PERL_DESTRUCT_LEVEL} = $level;
+ _diag("Global destruction level $level set by PERL_DESTRUCT_LEVEL (forced)");
+ return 1;
}
+ } elsif (defined $env_level) {
+ _diag("PERL_DESTRUCT_LEVEL is set to $env_level, but this perl doesn't seem to have debugging enabled, ignoring");
}
my $has_perl_destruct_level = do {
1;
}
};
+
if ($has_perl_destruct_level) {
_diag("Global destruction level $level set by Perl::Destruct::Level");
- return;
+ return 1;
}
+
+ _diag("Not testing global destruction");
+ return 0;
}
1;