my %SPEC;
-my $strict_bits = strict::bits(qw(subs refs vars));
+use constant _strict_bits => strict::bits(qw(subs refs vars));
# it must be "require", because Mouse::Util depends on Mouse::Exporter,
# which depends on Mouse::Util::import()
require Mouse::Util;
sub import{
- $^H |= $strict_bits; # strict->import;
+ $^H |= _strict_bits; # strict->import;
${^WARNING_BITS} = $warnings::Bits{all}; # warnings->import;
return;
}
my $exporting_package = $args{exporting_package} ||= caller();
+ my($import, $unimport) = $class->build_import_methods(%args);
+
+ no strict 'refs';
+
+ *{$exporting_package . '::import'} = $import;
+ *{$exporting_package . '::unimport'} = $unimport;
+
+ # for backward compatibility
+ *{$exporting_package . '::export_to_level'} = sub{
+ my($package, $level, undef, @args) = @_; # the third argument is redundant
+ $package->import({ into_level => $level + 1 }, @args);
+ };
+ *{$exporting_package . '::export'} = sub{
+ my($package, $into, @args) = @_;
+ $package->import({ into => $into }, @args);
+ };
+ return;
+}
+
+sub build_import_methods{
+ my($class, %args) = @_;
+
+ my $exporting_package = $args{exporting_package} ||= caller();
+
$SPEC{$exporting_package} = \%args;
# canonicalize args
if(my $init_meta = $package->can('init_meta')){
if(!grep{ $_ == $init_meta } @init_meta_methods){
- unshift @init_meta_methods, $init_meta;
+ push @init_meta_methods, $init_meta;
}
}
}
}
}
- no strict 'refs';
-
- *{$exporting_package . '::import'} = \&do_import;
- *{$exporting_package . '::unimport'} = \&do_unimport;
-
- return;
+ return (\&do_import, \&do_unimport);
}
}
}
- $^H |= $strict_bits; # strict->import;
+ $^H |= _strict_bits; # strict->import;
${^WARNING_BITS} = $warnings::Bits{all}; # warnings->import;
if($into eq 'main' && !$spec->{_export_to_main}){
}
}
+#sub _spec{ %SPEC }
+
1;
__END__
Note that C<Mouse::Exporter> does not provide the C<with_meta> option,
but you can easily get the metaclass by C<< caller->meta >> as L</SYNOPSIS> shows.
+=head1 METHODS
+
+=head2 C<< setup_import_methods( ARGS ) >>
+
+=head2 C<< build_import_methods( ARGS ) -> (\&import, \&unimport) >>
+
=head1 SEE ALSO
L<Moose::Exporter>
=cut
+