Acme-Evil
view release on metacpan or search on metacpan
lib/evil.pm view on Meta::CPAN
my $level = 4;
my @caller;
while (@caller = caller $level) {
$hinthash = $caller[10] || {};
croak "Cannot load evil module when ancestor requested \"no evil ':intermediate'\""
if $hinthash->{$INTERMEDIATE};
$level++;
}
$tainted{caller()} = 1;
}
sub unimport {
my $strict_arg = grep /^:strict$/i, @_;
my $intermediate_arg = grep /^:intermediate$/i, @_;
my $lax_arg = grep /^:lax$/i, @_;
my $disable_arg = grep /^:disable$/i, @_;
if (!$disable_arg && $tainted{caller()}) { # caller is evil
croak 'Current module is evil'
}
if ($strict_arg) {
$wants_strict{caller()} = 1;
croak "Evil module already loaded. Cannot enforce \"no evil ':strict'\"" if %tainted
} elsif ($lax_arg) {
$^H{$LAX} = 1
} elsif ($disable_arg) {
delete $wants_strict{caller()};
delete $^H{$LAX};
delete $^H{$INTERMEDIATE};
} else { # $intermediate_arg or no arg
$^H{$INTERMEDIATE} = $^H{$LAX} = 1
}
}
1;
__END__
( run in 0.479 second using v1.01-cache-2.11-cpan-b61123c0432 )