我在使用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,
答案 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);
我还建议将参数传递给函数并利用返回值而不是依赖于全局变量。
有关参考资料的更多信息