Поскольку не совсем понятно, что означает «загрузка CSV-файла в хеш-код perl» (Это также не имеет смысла. Массив хэшей, по одному на строку, может быть, если вы не заботитесь о сохранении порядка следования поля, но только хэш? Какие ключи должны быть?), давайте сосредоточимся на остальной части вашего вопроса, в частности
как я буду печатать счет "Passing" для "Владелец" Y65.
Есть несколько других CSV-модулей, которые могут быть интересны, и их гораздо проще использовать, чем Text::CSV
:
- Tie :: CSV_File позволяет получить доступ к CSV-файлу, например, к 2D-массиву.
$foo[0][0]
- это первое поле первой строки связанного файла.
Итак:
#!/usr/bin/perl
use warnings;
use strict;
use feature qw/say/;
use Tie::CSV_File;
my $csv = "data.csv";
tie my @data, "Tie::CSV_File", $csv or die "Unable to tie $csv!";
for my $row (@data) {
say $row->[2] and last if $row->[0] eq "Y65";
}
- DBD :: CSV позволяет обрабатывать CSV-файл как таблицу в базе данных, в которой можно выполнять SQL-запросы.
Итак:
#!/usr/bin/perl
use warnings;
use strict;
use feature qw/say/;
use DBI;
my $csv = "data.csv";
my $dbh = DBI->connect("dbi:CSV:", undef, undef,
{ csv_tables => { data => { f_file => $csv } } })
or die $DBI::errstr;
my $owner = "Y65";
my $p = $dbh->selectrow_arrayref("SELECT Passing FROM data WHERE Owner = ?",
{}, $owner);
say $p->[0] if defined $p;
Итак:
#!/usr/bin/perl
use warnings;
use strict;
use feature qw/say/;
use Text::AutoCSV;
my $csv = "data.csv";
my $acsv = Text::AutoCSV->new(in_file => $csv) or die "Unable to open $csv!";
my $row = $acsv->search_1hr("OWNER", "Y65");
say $row->{"PASSING"} if defined $row;
Этот последний, вероятно, ближе всего к тому, что, я думаю, вы считаете нужным.