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;
-
- # for backward compatibility
-
- *{$exporting_package . '::export_to_level'} = sub{
- my($package, $level, undef, @args) = @_; # the third argument is redundant
- do_import($package, { into_level => $level + 1 }, @args);
- };
- *{$exporting_package . '::export'} = sub{
- my($package, $into, @args) = @_;
- do_import($package, { into => $into }, @args);
- };
-
- return;
+ return (\&do_import, \&do_unimport);
}
$^H |= _strict_bits; # strict->import;
${^WARNING_BITS} = $warnings::Bits{all}; # warnings->import;
- if($into eq 'main' && !$spec->{_export_to_main}){
- warn qq{$package does not export its sugar to the 'main' package.\n};
- return;
- }
-
if($spec->{INIT_META}){
foreach my $init_meta(@{$spec->{INIT_META}}){
$into->$init_meta(for_class => $into);
Mouse::Exporter - make an import() and unimport() just like Mouse.pm
+=head1 VERSION
+
+This document describes Mouse version 0.40
+
=head1 SYNOPSIS
package MyApp::Mouse;\r
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>