nextgen
view release on metacpan or search on metacpan
lib/nextgen.pm view on Meta::CPAN
## CPAN procedural
use autodie ();
use indirect ();
## CPAN OO
use Moose ();
use B::Hooks::EndOfScope qw(on_scope_end);
use namespace::autoclean ();
use nextgen::blacklist;
sub import {
my ( $class, %args ) = @_;
my @caller = caller;
my $pkg = $caller[0];
## This will make nextgen a noop for main with -Mnextgen -e''
## Instead nextgen will only affect package class (per oose.pm)
## This is no longer desired because it permits -Mnextgen -MNEXT -e'1'
## So, it can stayl commented out
## if (
## $caller[2] == 0 # line
## && $caller[1] eq '-e' && $0 eq '-e'
## ) {
## return ()
## }
my $procedural = (
$pkg eq 'main'
|| defined $args{'mode'} && $args{'mode'} ~~ qr/:procedural/
) ? 1 : 0
;
feature->import(':5.10');
indirect->unimport(':fatal');
autodie->import();
## Moose will import warnings and strict by default
if ( !$procedural && $pkg ne 'main' ) {
mro::set_mro( $pkg, 'c3' );
Moose->import({ 'into' => $pkg })
unless $pkg->can('meta')
;
## Cleanup if the package has a new or meta (Moose::Roles)
on_scope_end( sub {
no strict qw/refs/;
no warnings;
namespace::autoclean->import( -cleanee => $pkg )
if defined $pkg->can('new')
|| defined $pkg->can('meta')
;
} )
}
else {
warnings->import();
strict->import();
}
nextgen::blacklist->import(
_blacklist_policy()
, { -callee => $pkg }
);
}
sub _blacklist_policy {
state $nextgen_default_blacklist = {
'base.pm' => {
replacement => 'parent'
, reason => "This module has been deprecated by 'parent', which really shouldn't be used either. Check out 'extends', in Moose.pm."
}
, 'Mouse.pm' => {
replacement => 'Moose'
, reason => "nextgen imports Moose which generates faster code than Mouse"
}
, 'Class/Accessor.pm' => {
replacement => 'Moose'
, reason => "Moose provides Accessor builder functionality through the 'has' builder"
}
, 'Class/Accessor/Fast.pm' => {
replacement => 'Moose'
, reason => "Moose provides Accessor builder functionality through the 'has' builder"
}
, 'Class/Accessor/Faster.pm' => {
replacement => 'Moose'
, reason => "NEXT is deprecated"
}
, 'NEXT.pm' => {
replacement => 'mro'
, reason => "NEXT is deprecated"
}
## Reason needed here
, 'Switch.pm' => {
replacement => 'features'
, reason => "5.10 provides a native switch statement see 'perldoc perlsyn' for more info"
}
, 'Digest/SHA1.pm' => {
replacement => 'Digest::SHA'
, reason => "Digest::SHA1 is deprecated"
}
, 'Class/C3.pm' => {
replacement => 'mro'
, reason => "nextgen imports 'mro'"
}
, 'MRO/Compat.pm' => {
replacement => 'mro'
, reason => "nextgen imports 'mro'"
}
## Plain not needed, ever
, 'strict.pm' => {
replacement => 'nextgen'
, reason => "nextgen imports 'strict'"
( run in 2.233 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )