1

for ループにいくつかのデータを含む配列の配列を作成しようとしています。以下のコードの正規表現コマンドは、配置するスカラーを収集するのに役立ちます。私が知る限り、それは正しいのですが、@output 配列を CSV ファイルに出力しようとすると、「"strict refs" が使用されている間は、ARRAY ref として string () を使用できません」というメッセージが表示されます。エラー。これは、配列を作成する方法またはファイルに書き込もうとしている方法によるものですか?

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

これは、4 つのスカラーを にプッシュしています@output

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

括弧は無用に優先順位を制御するだけです。角かっこを使用します。

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

角かっこは配列を作成し、それへの参照を返します。

于 2013-11-07T21:41:06.467 に答える