{ package My::Logger; our @EXPORT = qw/log_message/; use parent qw/Exporter/; sub log_message { my ($message) = @_; print STDERR "$PACKAGE - $message"; } } { package My::Script; # if these were separate files, we'd use "use My::Logger" My::Logger->import; # want this to say "My::Script - Hello" log_message("Hello"); } #### { package My::Logger; sub import { my $PACKAGE = caller; no strict 'refs'; *{"$PACKAGE\::log_message"} = sub { my ($message) = @_; print STDERR "$PACKAGE - $message"; }; } } { package My::Script; My::Logger->import; log_message("Hello"); } #### use Sub::Name qw/subname/; do { no strict 'refs'; my $name = "$PACKAGE\::log_message"; *{$name} = subname $name => sub { ... }; };