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);