使用Text :: CSV将数据打印到csv时,全局符号需要显式包名称错误?

时间:2014-07-17 13:00:47

标签: perl csv

我在使用Text :: CSV模块将数据写入csv文件时遇到了麻烦。实际上这是我的第一个perl脚本..我正在尝试基本创建一个标题。 这是代码

     use strict;
     use warnings;
     use Text::CSV;

     my $prefix="SP_RECON_";
     my $spident=12345;
     my $today;
     my $datetime;
     my $dbh;
     our $rowcount=0;

     $today=GetCurrentDate();


     my $filename=$prefix . $spident . '_' . $today;
     my $csv = Text::CSV->new({binary => 1, eol => "\n" });
     my @array =   ("RecordId","FileFormatVer","ServiceIdentifier","BatchDate","BatchNum","TimeStamp");

     formatHeader();

     sleep(3);
     changeExtensionReady();


     sub GetCurrentDate
     {
     my($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime();
     $today=sprintf "%04d%02d%02d",$year+1900,$mon+1,$mday;
     $datetime=sprintf "%04d%02d%02d%02d%02d%02d",$year+1900,$mon+1,$mday,$hour,$min,$sec;
     return $today;
     }


     sub changeExtensionReady
     {
     my $value=rename ("$filename.busy","$filename.ready") or die "Unable to rename: $!";
     print $value;
     }

     sub formatHeader
     {
     open my $fh, ">>:encoding(utf8)", "$filename.busy" or die "$filename.busy: $!";
     $csv->print($fh,$array);
     close $fh or die "$filename.busy: $!";
     }

上面的代码给我编译错误,如

<b>Global symbol "$array" requires explicit package name at
C:\onebal\scripts\reportGen.pl line 47.
Execution of C:\onebal\scripts\reportGen.pl 
aborted due to compilation errors.</b>

我不知道 csv-&gt;打印的问题是什么?

任何帮助将不胜感激..

BRS,

2 个答案:

答案 0 :(得分:1)

您应该将数组引用传递给print。变化:

 $csv->print($fh,$array);

为:

 $csv->print($fh,\@array);

错误的原因是您使用strict,但您没有名为array的标量变量。您只有一个名为array的数组变量。

答案 1 :(得分:0)

变量@array$array不同。第一个是数组,第二个是标量。

Text::CSV&#39; print方法需要数组引用(指向数组的指针)。您可以使用\运算符从命名数组创建它,也可以使用[ ... ]构造函数创建对匿名数组的引用。

因此,在您的情况下,将代码更改为

 $csv->print($fh, \@array);

我还建议将参数传递给函数并利用返回值而不是依赖于全局变量。

有关参考资料的更多信息