package Exporter::End;
sub import {
my @packages = @_;
shift @packages;
@packages = (caller)[0] unless defined @packages;
foreach my $orig (@packages) {
my ($end) = $orig =~ /(\w+)$/;
*{"${orig}::import"} = sub {
my $pkg = (caller)[0];
*{"${pkg}::${end}::"} = *{"${orig}::"};
}
}
}
1;
####
package Foo::Bar::Baz;
use Exporter::End;
sub x {print 1};
# ...
package main;
use Foo::Bar::Baz;
Baz::x(); # same as main::Baz::x();
####
package Foo::Bar::Baz;
sub x {print 1};
# ...
package main;
use Exporter::End qw(Foo::Bar::Baz);
Baz::x(); # same as main::Baz::x();