If you want to pass a filehandle like that I would recommend using the
FileHandle module.

As your script stands, however, you have no reason to pass the
filehandle to the subroutine.  You can just do a "print ERRLOG $scalar"
to print.





-----Original Message-----
From: Ted Fines [mailto:[EMAIL PROTECTED] 
Sent: Thursday, August 31, 2006 12:17 PM
To: beginners@perl.org
Subject: 'use strict' and filehandles

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.

<snip>

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";

# <snip>

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