use My::Module { hairiness => 2 }, qw(:core frobnicate); frobnicate( $foo ); # with hairiness = 2 #### package My::Module; use parent qw(Exporter); our @EXPORT_OK = qw(frobnicate); our %EXPORT_TAGS = ( core => [], ); sub import { # or do it via a foreach and extra @args array my %setup = map { %$_ } grep { ref $_ eq 'HASH' } @_; @_ = grep { ref $_ ne 'HASH' } @_; $_[0]->per_package_setup( scalar caller, %setup ); goto \&Exporter::import; }; my %per_package_conf; # or our?.. sub per_package_setup { my ($self, $target, %options) = @_; # setup for target }; sub frobnicate { my $x = shift; return $x; # TODO actually use parameters here };