次のような 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 などに追加する必要がありますか?