/usr/local/CPAN/wildproto/pragmatic.pm
package pragmatic;
$VERSION = 1.0;
bootstrap xsub;
use xsub _refcount => q($), q{
SV *sv = argv[0];
if (SvROK(sv)) {
SV *rv = SvRV(sv);
return newSVuv(SvREFCNT(rv));
} else {
return &PL_sv_undef;
}
};
sub DESTROY {
my $x = shift;
my ($p, $b, $last) = splice @$x;
$last or return $p->disable;
_refcount($last) > 1 or return;
$$last[1] ? $p->enable : $p->disable
}
sub enable($) {
1
}
sub disable($) {
''
}
sub enabled($) {
my $p = shift;
!!($^H{$p} && ${$^H{$p}}[1])
}
sub disabled($) {
!shift->enabled
}
sub import($;) {
my $p = shift;
$^H |= 0x20000;
local *DESTROY = sub { };
$^H{$p} = bless [$p, 1, delete $^H{$p}];
$p->enable
}
sub unimport($;) {
my $p = shift;
$^H |= 0x20000;
local *DESTROY = sub { };
$^H{$p} = bless [$p, 0, delete $^H{$p}];
$p->disable
}
1