The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Moo::sification;

use Moo::_strictures;
no warnings 'once';
use Devel::GlobalDestruction qw(in_global_destruction);
use Carp qw(croak);
BEGIN { our @CARP_NOT = qw(Moo::HandleMoose) }

sub unimport {
  croak "Can't disable Moo::sification after inflation has been done"
    if $Moo::HandleMoose::SETUP_DONE;
  our $disabled = 1;
}

sub Moo::HandleMoose::AuthorityHack::DESTROY {
  unless (our $disabled or in_global_destruction) {
    require Moo::HandleMoose;
    Moo::HandleMoose->import;
  }
}

sub import {
  return
    if our $setup_done;
  if ($INC{"Moose.pm"}) {
    require Moo::HandleMoose;
    Moo::HandleMoose->import;
  } else {
    $Moose::AUTHORITY = bless({}, 'Moo::HandleMoose::AuthorityHack');
  }
  $setup_done = 1;
}

1;