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:
LIB:
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"; } }
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: many files one log file
by BrowserUk (Patriarch) on Dec 04, 2013 at 00:37 UTC | |
Re: many files one log file
by Eliya (Vicar) on Dec 04, 2013 at 00:49 UTC | |
by glenn (Scribe) on Dec 04, 2013 at 14:28 UTC | |
by glenn (Scribe) on Dec 04, 2013 at 14:03 UTC |
Back to
Seekers of Perl Wisdom