Избавление от предупреждений для неопределенных значений при использовании модуля Chart
Я использую модуль Chart для генерации диаграмм в формате PNG из данных CSV:
Это хорошо работает, графики выглядят хорошо, но я получаю предупреждения для undef
значения (в конце вышеприведенной диаграммы есть 3 таких значения):
# ~/txv3.pl "./L*TXV3*.csv" > /var/www/html/x.html
Generating chart: L_B17_C0_TXV3LIN_PA3_TI1_CI1
Use of uninitialized value $label in length at /usr/share/perl5/vendor_perl/Chart/Base.pm line 3477, <> line 69.
Use of uninitialized value in subroutine entry at /usr/share/perl5/vendor_perl/Chart/Base.pm line 3478, <> line 69.
Use of uninitialized value $label in length at /usr/share/perl5/vendor_perl/Chart/Base.pm line 3477, <> line 69.
Use of uninitialized value in subroutine entry at /usr/share/perl5/vendor_perl/Chart/Base.pm line 3478, <> line 69.
Use of uninitialized value $label in length at /usr/share/perl5/vendor_perl/Chart/Base.pm line 3477, <> line 69.
Use of uninitialized value in subroutine entry at /usr/share/perl5/vendor_perl/Chart/Base.pm line 3478, <> line 69.
Мне нужно избавиться от этих предупреждений, поскольку они здесь бесполезны, и они делают журнал моей работы Хадсона нечитаемым.
Итак, я попытался (используя Perl 5.10.1 на CentOS 6.4 / 64 бит):
#!/usr/bin/perl -w
use strict;
....
$pwrPng->set(%pwrOptions);
$biasPng->set(%biasOptions);
my $pwrPngFile = File::Spec->catfile(PNG_DIR, "${csv}_PWR.png");
my $biasPngFile = File::Spec->catfile(PNG_DIR, "${csv}_BIAS.png");
{
no warnings;
$pwrPng->png($pwrPngFile, $pwrData);
$biasPng->png($biasPngFile, $biasData);
}
Но предупреждения все еще напечатаны.
Любые предложения, пожалуйста?
2 ответа
В вашем задании Hudson установите обработчик для сигнала предупреждения, который фильтрует предупреждения, чтобы те, о которых вы знаете, не отображались.
BEGIN {
$SIG{'__WARN__'} = sub { my $w = shift; warn $w if $w !~ m|/Chart/Base.pm| };
}
Обычно лучше не игнорировать предупреждения.
Почему бы вам сначала не обработать значения undef перед графиком? Либо замените их чем-нибудь разумным, либо пропустите построение этих строк:
data.csv
RGI,BIAS,LABEL
20,130,"1146346307 #20"
21,135,"1146346307 #21"
22,140,
-
use Scalar::Util qw( looks_like_number );
my $fname = "data.csv";
open $fh, "<$fname"
or die "Unable to open $fname : $!";
my $data = [];
while (<$fh>) {
chomp;
my ($rgi, $bias, $label) = split /,/; # Better to use Text::CSV
next unless looks_like_number($rgi);
next unless looks_like_number($bias);
$label ||= "Unknown Row $."; # Rownum
# Create whatever structure you need.
push @$data, { rgi => $rgi, bias => $bias, label => $label };
}
# Now draw chart