1

我正在尝试在 for 循环中创建一个包含一些数据的数组数组。下面代码中的正则表达式命令帮助我收集我将放置在其中的标量。据我所知,这是正确的,但是当我尝试将 @output 数组输出到 CSV 文件时,我收到“在使用“严格引用”时不能使用字符串 () 作为 ARRAY 引用。错误。这是因为我创建数组的方式还是我试图将其写入文件的方式?

foreach my $row(@input){
    my @cmd = qx("command");
    foreach my $line(@cmd){
        if($line =~ /regex/){
            push(@output, ($sp_name, $sp_port, $sp_type, $sp_uid)); 
        }
    }
}

下面的代码是我用来创建输出文件的代码::

my $csv = Text::CSV->new()
    or die "Cannot use Text::CSV ($!)";
my $file = "output.csv";
open my $fh, '>', $file
    or die "Cannot open $file ($!)";
$csv->eol("\n");
foreach my $row (@output)
{
    $csv->print($fh, \@{$row})
        or die "Failed to write $file ($!)";
}
close $fh
    or die "Failed to close $file ($!)";
4

1 回答 1

5

This is pushing four scalars onto @output:

push(@output, ($sp_name, $sp_port, $sp_type, $sp_uid)); 

The parentheses do nothing but uselessly control precedence. Use square brackets:

push @output, [ $sp_name, $sp_port, $sp_type, $sp_uid ];

The square brackets create an array and return a reference to it.

于 2013-11-07T21:41:06.467 回答