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();