package MyModule; # Before calling any functions in this module, # be sure to first call `set_logger_fn(...)`. my $log_fn_ref; sub set_logger_fn { my ($fn_ref) = @_; $log_fn_ref = $fn_ref; } # ---------- sub do_some_work { # ... # write a log message. $log_fn_ref->("Doing some work in MyModule::do_some_work()"); # ... } 1;