Hi,

I'm running into a Cach-22 with 'use strict', and filehandles.

I have a program which opens two log files at the beginning:
open(INFLOG,">>$info_log") || die "Could not append to $info_log_file.  
Quitting.\n";
open(ERRLOG,">>$error_log") || die "Could not append to $error_log_file.  
Quitting.\n";

Then throughout the program, different subroutines print to the log files, e.g. 
in code sample A below, ERRLOG and INFLOG are declared at the start.  A 
subroutine tries to pass 'ERRLOG' or 'INFLOG' to the 'log' subroutine as a 
parameter.  With 'strict refs' in use, this code generates this error:
L:\>test.pl
Bareword "ERRLOG" not allowed while "strict subs" in use at L:\test.pl line 22.
Execution of L:\test.pl aborted due to compilation errors.

OK.  I've tried a few things to work around this, but no matter what I've tried 
I just get an error that I can't do something with strict something-else (refs 
or subs) is in use.

If I turn off strict it all just works, of course.  Would someone please share 
how to solve this problem, while using the 'strict' directive?

Thanks in advance,
Ted

CODE SAMPLE A START------------------------------------------------------
#!/usr/bin/perl
use strict;
use warnings;

my $info_log = 'testinfo.log';
my $error_log = 'testerror.log';

open(INFLOG,">>$info_log") || die "Could not append to $info_log.  Quitting.\n";
open(ERRLOG,">>$error_log") || die "Could not append to $error_log.  
Quitting.\n";

my $val = 1;
&something($val);
$val=2;
&something_else($val);
close ERRLOG;

sub something {
    my ($val)[EMAIL PROTECTED];
    my $bad = 1;
    my $good= 2;
    if ($val==$bad) {
        &log(ERRLOG,"Oh no!  val $val is $bad, should be $good");
    }
}

sub something_else {
    my ($val)[EMAIL PROTECTED];
    my $bad = 1;
    my $good= 2;
    if ($val != $bad) {
        &log(INFLOG,"Great! val $val is not $bad");
    }
}

sub log {
    my ($logfile,$msg)[EMAIL PROTECTED];
    print $logfile "$msg\n";
}
------------------------------------------------------CODE SAMPLE A END



-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to