rafailowski wrote:
>
> I have a problem with Getopt::Long and Log::StdLog.
>
> An example script, i always have the following error :
> Use of uninitialized value in hash element at
> /usr/local/share/perl/5.10.0/Log/StdLog.pm line 57
>
> level => $cmd_args_ref->{"log_level"} is always undef(???) but
> print $cmd_args_ref->{"log_level"}; return the good value
>
> I try to fix this with BEGIN block (around GetOptions) with no success
>
> Is there a way to solve this (BEGIN INIT block?)
>
> #!/usr/bin/perl
>
> use warnings;
> use strict;
> use Getopt::Long;
>
> my %cmd_args = ();
> my $cmd_args_ref = \%cmd_args;
>
> GetOptions(
> "log-level=s" => \$cmd_args{"log_level"},
> );
>
> sub log_format {
> my ($date, $pid, $level, @message) = @_;
> return "[$date][$level]: " . join(q{}, @message);
> };
>
> use Log::StdLog {
> format => \&log_format,
> file => "$0.log",
> level => $cmd_args_ref->{"log_level"},
> };
>
> print $cmd_args_ref->{"log_level"};
Calling GetOptions in a BEGIN block will work fine, but the initialisation of
$cmd_args_ref must be done at the same time, otherwise it won't be set up when
Log::StdLog comes to be imported. The code below should do what you want.
HTH,
Rob
use strict;
use warnings;
use Getopt::Long;
my (%cmd_args, $cmd_args_ref);
BEGIN {
GetOptions(
'log-level=s' => \$cmd_args{log_level},
);
$cmd_args_ref = \%cmd_args;
}
sub log_format {
my ($date, $pid, $level, @message) = @_;
local $" = q{};
return "[$date][$level]: @message";
}
use Log::StdLog {
format => \&log_format,
file => "$0.log",
level => $cmd_args_ref->{log_level},
};
print STDLOG user => "HELLO\n";
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/