3

我正在编写一个 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 函数接受我的数组元素?

4

2 回答 2

1

我认为在您的价值观列表中,有一个HASH REF需要取消引用。

Data::Dumper在您的代码中使用:

use Data::Dumper;
print Dumper @values;

并发布输出,我们将看到。

于 2012-06-05T19:21:43.187 回答
0

我有这个错误只是因为我在 add_line 中的一个值中有一个换行符。

以下是如何处理值中的换行符http://search.cpan.org/~hmbrand/Text-CSV_XS-1.18/CSV_XS.pm#Embedded_newlines

于 2015-05-31T07:59:36.097 回答