package Perl::Destruct::Level;

use strict;
use warnings;
use XSLoader ();

our $VERSION = '0.02';

XSLoader::load 'Perl::Destruct::Level', $VERSION;

sub import {
    shift;
    my %p = @_;
    set_destruct_level($p{level}) if exists $p{level};
}

1;

__END__

=head1 NAME

Perl::Destruct::Level - Allow to change perl's destruction level

=head1 SYNOPSIS

    use Perl::Destruct::Level level => 1;

    my $current_destruct_level = Perl::Destruct::Level::get_destruct_level();

=head1 DESCRIPTION

This module allows one to change perl's internal I<destruction level>.

The default value of the destruct level is 0; it means that perl won't
bother destroying all its internal data structures, but let the OS do
the cleanup for it at exit.

For perls built with debugging support (C<-DDEBUGGING>), an environment
variable C<PERL_DESTRUCT_LEVEL> allows one to control the destruction level.
This modules enables to modify it on non-debugging perls too.

Relevant values recognized by perl are 1 and 2. Consult your source
code to know exactly what they mean. Note that some embedded environments
might extend the meaning of the destruction level for their own purposes:
mod_perl does that, for example.

=head1 CAVEATS

This module won't work when used from within an END block.

Loading the C<threads> module will set the destruction level to 2. (This
is to enable spawned threads to properly cleanup their objects.) Loading
modules that load C<threads>, even if they don't spawn threads, will
also set the destruction level to 2. (A common example of such a module
is C<Test::Builder>.)

=head1 AUTHOR

Copyright (c) 2007 Rafael Garcia-Suarez. This program is free software; you
may redistribute it and/or modify it under the same terms as Perl itself.

=head1 SEE ALSO

L<perlrun>, L<perlhack>

=cut
