http://qs321.pair.com?node_id=1065504

glenn has asked for the wisdom of the Perl Monks concerning the following question:

So I am updating this program and all was going well until I tried to make main plus all libraries write to the same log file for debugging. It used to work when everything ran sequential but i'm threading it now to add flexibility. So what i have tried to do is open the log file in MAIN then pass the handle to the libraries. To ensure that two write dont occur at the same time i'm also passing a semaphore. If you have a better way or can make this work please let me know. I think one problem is the libraries are loaded before the variables are made available but putting them in BEGIN breaks stuff.

MAIN:
use Thread::Semaphore; my $writelog = Thread::Semaphore->new(); #sequential log writing use diagConfig; #$sourcepath, %files, and helper functions open my $LOGFH ,">", $files{log}{file}; #disable write buffer my $stdout = select($LOGFH); $| = 1; select($stdout); use License (\$LOGFH, \$writelog);

LIB:
package License; use strict; no strict "refs"; my $LOGFH = undef; my $writelog = undef; use diagConfig; #$sourcepath, %files, trimwhitespace, cleanupWincuri, +$WINCURI, $PLINK, $CLI sub import { shift; $LOGFH = ${$_[0]}; $writelog = ${$_[1]}; if (defined $writelog) { $writelog->down(); $writelog->up(); } else { print "semaphore is not defined\n"; } if (defined $LOGFH) { print $LOGFH "Initiator loaded\n"; } else { print "logfile is not defined\n"; } }