use strict; use warnings; use DBI; use DBD::SQLite; use Data::Dumper; my $dbh = DBI->connect( 'dbi:SQLite:dbname=test.sqlite', undef, undef, { RaiseError => 1, PrintError => 1, } ); eval { $dbh->do('CREATE TABLE evkeypairs (id INTEGER PRIMARY KEY NOT NULL,key TEXT,value TEXT);'); $dbh->do(q!INSERT INTO evkeypairs (key, value) VALUES ('foo','bar');!); $dbh->do(q!INSERT INTO evkeypairs (key, value) VALUES ('kung','foo');!); } or warn "$@"; my $sth = $dbh->prepare( 'SELECT * FROM evkeypairs' ); $sth->execute; my $href = $sth->fetchall_hashref( 'id' ); print Dumper $href; $dbh->disconnect; unlink 'test.sqlite'; __END__ $VAR1 = { '1' => { 'value' => 'bar', 'id' => '1', 'key' => 'foo' }, '2' => { 'value' => 'foo', 'id' => '2', 'key' => 'kung' } };