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;

出力を POST してみましょう。

于 2012-06-05T19:21:43.187 に答える
0

add_line の値の 1 つに改行文字が含まれていたため、このエラーが発生しました。

値の改行を処理する方法は次のとおりですhttp://search.cpan.org/~hmbrand/Text-CSV_XS-1.18/CSV_XS.pm#Embedded_newlines

于 2015-05-31T07:59:36.097 に答える