#!/opt/perl/bin/perl use strict; use warnings; use lib '.'; use MyModule; # ---------- open(my $logfile, '>>', 'blah.log') or die "Couldn't open log file."; sub my_logging_fn { my ($log_msg) = @_; print {$logfile} $log_msg, "\n"; } # ---------- # Set up MyModule to use our logging function. MyModule::set_logger_fn(\&my_logging_fn); # ---------- # main my_logging_fn("Doing something in the script."); MyModule::do_some_work(); my_logging_fn("Ok, that's all for now."); #### 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;