Просто для суммирования комментариев икегами в одном ответе ...
У вас есть ошибки в ваших SQL-запросах.Строковые переменные должны быть заключены в кавычки при передаче в запросе.Это приведет к ошибке в базе данных, но вы не увидите ее, потому что вы не установили атрибут RaiseError на свой дескриптор, поверх которого вы отключили PrintError.
Включить управление ошибками при подключении к базе данных:
my $dbh = DBI->connect($dsn, $dbUsername, $dbPassword, {RaiseError => 1});
Чтобы избежать проблемы с цитированием и одновременно защитить код от внедрения SQL, используйте параметры связывания.
При поиске пользователя:
my $check = "SELECT * from tblusers WHERE login = ?";
my $sth = $dbh->prepare($check);
$sth->execute($username);
При создании нового пользователя:
my $sql = "INSERT INTO tblusers(login, password, name) VALUES(?, ?, ?)";
my $sth = $dbh->prepare($sql);
$sth->execute($username, $password, $name);