Как использовать DBD::CSV для получения строки имен столбцов?

Я использую DBD::CSV, чтобы показать данные CSV. Код у меня есть:

#! perl
use strict;
use warnings;
use DBI;

my $dbh = DBI->connect("dbi:CSV:", undef, undef, {
    f_dir            => ".",
    f_ext            => ".txt/r",
    f_lock           => 2,
    csv_eol          => "\n",
    csv_sep_char     => "|",
    csv_quote_char   => '"',
    csv_escape_char  => '"',
    csv_class        => "Text::CSV_XS",
    csv_null         => 1,
    csv_tables       => {
        info => {
            file => "countries.txt"
        }
    },  
    FetchHashKeyName => "NAME_lc",
}) or die $DBI::errstr;

$dbh->{csv_tables}->{countries} = {
  skip_first_row => 0,
  col_names => ["a","b","c","d"],
  raw_header => 1,
};

my $sth = $dbh->prepare ("select * from countries limit 1");
$sth->execute;
while (my @row = $sth->fetchrow_array) {
  print join " ", @row;
  print "\n"
}

Файл country.txt выглядит так:

ISO_COUNTRY|COUNTRY_NAME|REGION_CODE|REGION_NAME
AF|Afghanistan|A|Asia
AX|"Aland Islands"|E|Europe
AL|Albania|E|Europe

Но когда я запустил этот скрипт, он возвращает

AF Afghanistan A Asia

Я хотел это вернуть:

ISO_COUNTRY COUNTRY_NAME REGION_CODE REGION_NAME

Кто-нибудь знает, как этого добиться, используя модуль DBD::CSV?

Другой вопрос, почему настройка атрибута col_names не вступила в силу? Как заставить его вернуть следующее?

 a b c d

1 ответ

Решение

$sth->{NAME}, $sth->{NAME_lc} а также $sth->{NAME_uc} вернуть ссылку на массив, содержащий имена.

my $sth = $dbh->prepare("select * from countries limit 1");
$sth->execute;
print "$_\n" for @{ $sth->{NAME} };
Другие вопросы по тегам