sub printcaller { my $caller = (caller(1))[3]; print "$caller\n"; } my $package = 'testpackage'; eval qq{ sub ${package}::function { printcaller(); } }; testpackage::function(); # Output: testpackage::function