{
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 { ... };
};