in reply to Re: Passing filename to Log::Std
in thread Passing filename to Log::Std

OK, that makes sense. However, I'm trying to set $file and $level according to what's passed into the subroutine. But, when I run my code below, it still complains of an uninitialized value(s)...

sub StartLogging { our $ref = shift @_; # ref to config hash our ($file, $level); BEGIN { $file = $ref->{log}{file_base} . ".$ref->{hostname}{target}.$ +0.$$.log"; $level = $ref->{log}{level}; } if ( $ref->{log}{method} eq "StdLog" ) { print "Logging to file $file at minimum loglevel $level\n"; use Log::StdLog { level => $level, file => $file, }; #now, log messages can be written to {*STDLOG} my $print_rc = print {*STDLOG} warn => "warn - this is a test" +; } }

-- Burvil

Replies are listed 'Best First'.
Re^3: Passing filename to Log::Std
by chromatic (Archbishop) on Apr 12, 2006 at 21:51 UTC

    Use require and import(), not use if you're going to do it that way. As soon as the Perl parser finishes parsing the use statement, it runs it. This happens before StartLogging even finishes compiling, and much before anything calls the subroutine.

Re^3: Passing filename to Log::Std
by borisz (Canon) on Apr 12, 2006 at 21:47 UTC
    your code just move the problem. Try this: (untested)
    sub StartLogging { my $ref = shift @_; # ref to config hash my ( $file, $level ); $file = $ref->{log}{file_base} . ".$ref->{hostname}{target}.$0.$$.l +og"; $level = $ref->{log}{level}; if ( $ref->{log}{method} eq "StdLog" ) { print "Logging to file $file at minimum loglevel $level\n"; require Log::StdLog; Log::StdLog->import( { level => $level, file => $file, } ); #now, log messages can be written to {*STDLOG} print {*STDLOG} warn => "warn - this is a test"; } }
    Boris
      Hm, odd. That code crashes perl on win32, and so I think it would do the same on linux (segfault).

      Update: fixed typo, now runs with error messages:

      H:\working_files\win32>perl logtest.pl Use of uninitialized value in concatenation (.) or string at logtest.p +l line 32. Logging to file H:\working_files\test\testfile..logtest.pl.2096.log at + minimum l oglevel 'info' Unable to open log file 'H:\working_files\test\testfile..logtest.pl.20 +96.log' at logtest.pl line 46
      so, we can see that the variables in the config hash aren't being read in correctly....

      -- Burvil