use baseimp 'Foo' => ['Import', 'some', 'stuff'], 'Bar', # import defaults 'Buz' => [] # don't call import, just like use Buz () package baseimp; use base 'base'; # :) # unfortunately most modules (including base.pm) are hardwired to use caller(0) so trickery is needed use Sub::Uplevel; sub import { my $pkg = shift; $base_import = UNIVERSAL::can(__PACKAGE__, "SUPER::import"); while (my $class = shift) { # let base do it's thing uplevel(1, $base_import, $class); # now do what use would do my $imp_args; if (ref($_[0])) { $imp_args = shift; undef $imp_args unless @$imp_args; } else { $imp_args = []; } if ($imp_args) { $class_import = UNIVERSAL::can($class, "import"); uplevel(1, $class_import, $class, @$imp_args); } } }