Perl 使用Text::csv将数据打印到csv时,全局符号要求显式包名错误?
我无法使用Perl 使用Text::csv将数据打印到csv时,全局符号要求显式包名错误?,perl,csv,Perl,Csv,我无法使用Text::csv模块将数据写入csv文件。我正在尝试创建一个标题。 代码如下: use strict; use warnings; use Text::CSV; my $prefix="SP_RECON_"; my $spident=12345; my $today; my $datetime; my $dbh; our $rowcount=0; $today=GetCurrent
Text::csv
模块将数据写入csv文件。我正在尝试创建一个标题。
代码如下:
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>
全局符号“$array”要求在
C:\onebal\scripts\reportGen.pl第47行。
执行C:\onebal\scripts\reportGen.pl
由于编译错误而中止。
我无法找出csv->print的问题所在。您应该将数组引用传递给
print
。更改:
$csv->print($fh,$array);
致:
出现错误的原因是使用了
严格
,但没有名为数组
的标量变量。您只有一个名为array
的数组变量@array
和$array
的变量不同。第一个是数组,第二个是标量
Text::CSV
的print
方法需要数组引用(指向数组的指针)。您可以使用\
操作符从命名数组创建该数组,也可以使用[…]
构造函数创建对匿名数组的引用
因此,在您的情况下,将代码更改为
$csv->print($fh, \@array);
我还建议将参数传递给函数,并利用返回值,而不是依赖全局变量
更多参考资料
$csv->print($fh, \@array);