модуль Db предназначен для работы с базами данных.

Модуль позволяет работать одновременно с разными базами данных, но в большинстве случаев используется одно соединение. Это соединение глобальное в рамках NoDeny и к нему можно обращаться по имени Db, а не через переменную:

Db->do('DELETE FROM tbl WHERE 0');

Основные методы:

Метод do наиболее простой. Возращает количество строк, которые были успешно обновлены или удалены. Если запрос не будет выполнен, например, он ошибочен - будет возвращено число -1 (минус один):

my $rows = Db->do('DELETE FROM tbl WHERE 0');
$rows < 1 && Error 'Запрос не выполнен. Либо ошибочный sql либо условию соответствует 0 строк';

Метод sql обычно используется для SELECT запросов:

my $db = Db->sql("SELECT id, name FROM users");
$db->ok or Error 'Запрос не был выполнен!';
while( my %p = $db->line )
{
    debug("$p{id} = $p{name}");
}

Метод ok возвращает ненулевое число, если последний sql был выполнен успешно. При этом, причина может быть вовсе не в неправильном sql, а, например, в дисконнекте БД либо повреждении таблицы. Обычно программисты игнорируют такого рода ошибки, что приводит к очень долгому и нудному выявлению причины внезапной неработоспособности продукта. Да, вероятность дисконнекта mysql на localhost низка, повреждения таблицы - тоже, у вас же все надежно? Но не забывайте, что вы пишете код не только для себя, да и рано или поздно вдруг вы допустите переполнение диска?

В приведенном выше примере, в результате выполнения sql мы получили объект $db, который хранит результат, в нашем случае все строки таблицы users. Из этого результата мы последовательно получаем последующую строку методом line. Метод line может применяться не только к результату, но и использоваться в случае, когда мы гарантированно выбираем одну строку:

my %p = Db->line("SELECT COUNT(*) AS n FROM users");
Db->ok or Error 'Количество клиентов не получено: sql не был выполнен!';
debug('Всего клиентов в базе:', $p{n});

Крайне рекомендуется динамические параметры вставлять в sql как плейсхолдеры:

my $db = Db->sql("SELECT * FROM users WHERE name=? AND fio=?", $name, $fio);

Это эквивалент "SELECT * FROM users WHERE name=$name AND fio=$fio", при этом в $name и $fio будут автоматически экранированы символы, которые могут привести к sql инъекциям или просто к невыполнению sql.

Метод sql имеет альтернативный расширенный формат вызова:

my $db = Db->sql(
    sql     => "SELECT * FROM tbl WHERE field=? AND val=?",
    param   => [ $filed, $val ],
    comment => 'Выбираем опасных абонентов',
);
while( my %p = $db->line ) { ... }