Comment puis-je obtenir les noms de colonnes et de lignes de données dans l'ordre avec DBI en Perl?

Je suis en utilisant DBI pour interroger une base de données SQLite3. Ce que j'ai fonctionne, mais il ne renvoie pas les colonnes dans l'ordre. Exemple:

Query:  select col1, col2, col3, col4 from some_view;
Output:

    col3, col2, col1, col4
    3, 2, 1, 4
    3, 2, 1, 4
    3, 2, 1, 4
    3, 2, 1, 4
    ...

(values and columns are just for illustration)

Je sais ce qui se passe parce que je suis en utilisant une table de hachage, mais sinon, comment puis-je obtenir les noms de colonne en arrière si je utilisez uniquement un tableau? Tout ce que je veux faire est d'obtenir quelque chose comme ça pour tout arbitraire requête:

    col1, col2, col3, col4
    1, 2, 3, 4
    1, 2, 3, 4
    1, 2, 3, 4
    1, 2, 3, 4
    ...

(Qui est, je dois la sortie est dans le bon ordre et avec les noms de colonne.)

Je suis très Perl novice, mais je pensais vraiment que ce serait un problème simple. (Je l'ai fait avant d'en Ruby et PHP, mais je vais avoir du mal à suivre ce que je suis à la recherche dans la documentation Perl.)

Voici un rogné version de ce que j'ai en ce moment:

use Data::Dumper;
use DBI;

my $database_path = '~/path/to/db.sqlite3';

$database = DBI->connect(
  "dbi:SQLite:dbname=$database_path",
  "",
  "",
  {
    RaiseError => 1,
    AutoCommit => 0,
  }
) or die "Couldn't connect to database: " . DBI->errstr;

my $result = $database->prepare('select col1, col2, col3, col4 from some_view;')
    or die "Couldn't prepare query: " . $database->errstr;

$result->execute
    or die "Couldn't execute query: " . $result->errstr;

########################################################################################### 
# What goes here to print the fields that I requested in the query?
# It can be totally arbitrary or '*' -- "col1, col2, col3, col4" is just for illustration.
# I would expect it to be called something like $result->fields
########################################################################################### 

while (my $row = $result->fetchrow_hashref) {
    my $csv = join(',', values %$row);
    print "$csv\n";
}

$result->finish;

$database->disconnect;

OriginalL'auteur Benjamin Oakes | 2010-02-17