Имеется некая форма позволяющая пользователя сменить его пароль. Для этого надо ввести текущий пароль и дважды новый. Если введеный текущий пароль соответвует хранящемуся в базе, то провярается равенство дважды введеного нового пароля и если они равны пароль меняется. Одним словом достаточно стандартный алгоритм.
Сначала правильность текущего пароля я проверял с помощью $sth->rows, но документация настроятельно не советует применять этот метод для select запросов. Я пробую переписать проверку на на использование fetchall_arrayref. Насколько я понял, и print это подтверждает, мне возвражается ссылка на массив, что собственно следует даже из названия. Но ссылка не простая, я ссылка на ссылки строк с данными.
Как то сложно получилось, привожу выдержку из документации:
Код: Выделить всё
The "fetchall_arrayref" method can be used to fetch all the data to be returned from a prepared and executed statement handle. It returns a reference to an array that contains one reference per row.
В моей текущей ситации, проверка пароля, мне достаточно узнать размер массива и если он равен единице, выбрано одно значение, то пароль верен. Но увы, у меня не получается написать этот код для my $a = $sth->fetchall_arrayref.
Начальный код, получение ссылки:
Код: Выделить всё
print $a;
ARRAY(0x92dcd08)
Попытка пройти по ссылке (разименовать ее):
Код: Выделить всё
print \$a;
REF(0xa08ed88)
Сейчас изучаю "Изучаем глубже Perl" Р.Л.Шварц и там есть примеры по работе с такими структурами, но тут проявляется одно но - я заранее не могу знать сколько строк мне вернется.
Поэтому прошу помощи в вопросе - как узнать размер массива по ссылке если сам массив представляет из себя ссылки на другие массивы.
Или есть более простой способ решения?
Спасибо.