Example: #!/usr/bin/perl use strict; use warnings; use Alias::Exporter ( "Test::Foo" => { bar => 'foo' }, "Test::Bar" => { bar => 'baz' }, ); foo(); baz(); # file Test/Foo.pm package Test::Foo; use Exporter; our @ISA = qw(Exporter); our @EXPORT_OK = qw(bar); sub bar { print "Test::Foo::bar!\n"; } 1; # file Test/Bar.pm package Test::Bar; use Exporter; our @ISA = qw(Exporter); our @EXPORT_OK = qw(bar); sub bar { print "Test::Bar::bar!\n"; } 1; # the guts: warning - ugly code ahead package Alias::Exporter; use strict; use warnings; sub import { my $class = shift; my %modules = @_; my $package = caller(); for my $module ( keys %modules ) { my %imports = %{$modules{$module}}; my @import_list = keys %imports; eval qq| use $module ( \@import_list ); for my \$var ( \@import_list ) { no strict 'refs'; *{ \$package . "::\$imports{\$var}" } = \\&{\$var}; } |; die $@ if $@; } } 1;