package X; require Exporter; our @ISA = qw(Exporter); our @EXPORT = qw(func_in_X); use Y; sub func_in_X { print "func_in_X called.\n"; } 1; --- package Y; require Exporter; our @ISA = qw(Exporter); our @EXPORT = qw(func_in_Y); sub func_in_Y { print "func_in_Y called.\n"; } 1; #### #!/usr/bin/perl use X; # X uses Y secondarily # this works func_in_X(); # imported into our namespace Y::func_in_Y(); # fully qualified X::func_in_Y(); # fully qualified via namespace X, # into which func_in_Y() has been exported # this doesn't work func_in_Y(); # not imported into our namespace