我有 Perl 和 CSV 文件,例如:
"Name","Lastname"
"Homer","Simpsons"
"Ned","Flanders"
在这个 CSV 文件中,我在第一行有标题,在其他行有数据。
我想将此 CSV 文件转换为此类 Perl 数据:
[
{
Lastname => "Simpsons",
Name => "Homer",
},
{
Lastname => "Flanders",
Name => "Ned",
},
]
我已经编写了用户Text::CSV并做我需要的功能。这是示例脚本:
#!/usr/bin/perl
use strict;
use warnings FATAL => 'all';
use 5.010;
use utf8;
use open qw(:std :utf8);
use Text::CSV;
sub read_csv {
my ($filename) = @_;
my @first_line;
my $result;
my $csv = Text::CSV->new ({ binary => 1, auto_diag => 1 });
open my $fh, "<:encoding(utf8)", $filename or die "$filename: $!";
while (my $row = $csv->getline ($fh)) {
if (not @first_line) {
@first_line = @{$row};
} else {
push @{$result}, { map { $first_line[$_] => $row->[$_] } 0..$#first_line };
}
}
close $fh;
return $result;
}
my $data = read_csv('sample.csv');
这很好用,但我想在几个脚本中使用这个函数。我很惊讶 Text::CSV 没有这个功能。
我的问题。我应该做些什么来简化我和其他人将来解决此类任务的过程?
我应该使用 CPAN 中的一些 Perl 模块,我应该尝试将此函数添加到 Text::CSV 还是其他什么?