1 package Moose::Exporter;
11 # 1 extra level because it's called by import so there's a layer of indirection
15 (ref $_[1] && defined $_[1]->{into})
17 : (ref $_[1] && defined $_[1]->{into_level})
18 ? caller($offset + $_[1]->{into_level})
27 my $exporting_pkg = caller();
30 for my $name ( @{ $args{with_caller} } ) {
31 my $sub = do { no strict 'refs'; \&{ $exporting_pkg . '::' . $name } };
33 my $wrapped = Class::MOP::subname(
34 $exporting_pkg . '::' . $name => sub { $sub->( scalar caller(), @_ ) } );
36 $exports{$name} = sub { $wrapped };
38 push @{ $EXPORTED{$exporting_pkg} }, $name;
41 for my $name ( @{ $args{as_is} } ) {
46 $name = ( Class::MOP::get_code_info($name) )[1];
49 $sub = do { no strict 'refs'; \&{ $exporting_pkg . '::' . $name } };
51 push @{ $EXPORTED{$exporting_pkg} }, $name;
54 $exports{$name} = sub { $sub };
57 return Sub::Exporter::build_exporter(
60 groups => { default => [':all'] }
71 for my $name ( @{ $EXPORTED{ $args{source} } } ) {
72 if ( defined &{ $args{from} . '::' . $name } ) {
73 my $keyword = \&{ $args{from} . '::' . $name };
75 # make sure it is from us
76 my ($pkg_name) = Class::MOP::get_code_info($keyword);
77 next if $pkg_name ne $args{source};
79 # and if it is from us, then undef the slot
80 delete ${ $args{from} . '::' }{$name};