在Perl中,如何编写和读取由密钥和数组组成的CSV文件?

YoD*_*Dar -1 csv perl

我有一个问题是要正确地编写和读取由名称(键)和值数组组成的CSV文件:

testarray.csv

foo1 ,0,0,0,0,1
foo2 ,1,0,0,0,1
foo3 ,3,4,5,6,7
.
.
.
Run Code Online (Sandbox Code Playgroud)

我需要表示该文件如下:

foo# 将是关键,以下五个数字将是它的数组.

进行该操作并将其召回以供使用(不是使用Dumper)的简单方法是什么?如何使用特定键的数组中的变量?

例如,

print $hsh{'foo1'}[4];
Run Code Online (Sandbox Code Playgroud)

Sin*_*nür 6

通常,我建议使用Text :: xSV和/或Text :: CSV,但对于这样简单的数据,join应该可以直接使用:

#!/usr/bin/perl

use strict;
use warnings;

my %hash = (
    foo1 => [ 0, 0, 0, 0, 1 ],
    foo2 => [ 1, 0, 0, 0, 1 ],
    foo3 => [ 3, 4, 5, 6, 7 ],
);

for my $key ( sort keys %hash ) {
    print join( q{,}, $key, @{ $hash{$key} } ), "\n";
}

__END__
Run Code Online (Sandbox Code Playgroud)

输出:

C:\Temp> ttt
foo1,0,0,0,0,1
foo2,1,0,0,0,1
foo3,3,4,5,6,7
Run Code Online (Sandbox Code Playgroud)

阅读:

#!/usr/bin/perl

use strict;
use warnings;

my %hash;

while ( <DATA> ) {
    chomp;
    last unless /\S/;
    my ($key, @data) = split /,/;
    $hash{$key} = \@data;
}

print $hash{foo2}->[4], "\n";

__DATA__
foo1,0,0,0,0,1
foo2,1,0,0,0,1
foo3,3,4,5,6,7
Run Code Online (Sandbox Code Playgroud)

输出:

C:\Temp> ttt
1
Run Code Online (Sandbox Code Playgroud)