我正在编写Perl脚本并使用Class::CSV模块。我有一组数字,长5个元素
$values[0] - $values[4]
我正在尝试向CSV文件添加一个新行,并使用数组中的值填充新行。但是,当我尝试运行脚本时,我一直收到此错误:
Failed to create CSV line from line:
10252205
at /usr/lib/perl5/site_perl/5.8.8/Class/CSV.pm line 257
Class::CSV::Line::string('Class::CSV::Line=HASH(0x1f2d0f20)') called at /usr/lib/perl5/site_perl/5.8.8/Class/CSV.pm line 435
Class::CSV::string('Class::CSV=HASH(0x1f2c1c00)') called at catchmailstats.pl line 116
以下是CSV构造的代码:
# Create csv file from the current data
my $csv = Class::CSV->new(
fields => [qw/Month NotSpam Probable Quarantine Spam Total/],
);
# Creates the first row (Headers)
$csv->add_line({
Month => 'Month',
NotSpam => 'NotSpam',
Probable => 'Probable',
Quarantine => 'Quarantine',
Spam => 'Spam',
Total => 'Total'
});
# Creates the second row (values)
$csv->add_line([$values[0], $values[1],$values[2],$values[3],$values[4], $total]);
我也尝试过使用其他符号样式:
# Creates the second row (values)
$csv->add_line({
Month => $values[0],
NotSpam => $values[1],
Probable => $values[2],
Quarantine => $values[3],
Spam => $values[4],
Total => $total
});
两种风格都没有效果。不过,这是我注意到的事情。最终变量$ total是$ values [1]到$ values [4]的总和。这个变量可以正常工作。
所以我真正的问题是:为什么不会引用我的数组中的元素,但是来自同一个数组的元素的总和,编译没有问题?如何让add_line函数接受我的数组元素?
答案 0 :(得分:1)
我认为在您的值列表中,需要取消引用HASH REF
。
在代码中使用Data::Dumper
:
use Data::Dumper;
print Dumper @values;
并输出POST,我们会看到。
答案 1 :(得分:0)
我之所以遇到这个错误只是因为我在add_line中的某个值中有了一个换行符。
以下是如何处理您的值http://search.cpan.org/~hmbrand/Text-CSV_XS-1.18/CSV_XS.pm#Embedded_newlines
中的换行符