use My::Mod qw(:core frobnicate), { hairiness => 2 }; frobnicate( arg1 => 'val1' ); # with hairiness => 2 #### package My::Mod; 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; }; use Data::Dumper; sub per_package_setup { my ($self, $target, %options) = @_; # setup for target print STDERR "$self->per_package_setup($target, VAR1):\n"; print STDERR Dumper \%options; %self::OPTS = %options; }; sub frobnicate { print map { "frobnicate($_)\n"} @_; printf "{ %-20s => %s }\n", $_, $self::OPTS{$_} foreach sort keys %self::OPTS; } 1;