| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: разработка для Web > Зависание скрипта при проходе по массиву |
| Автор: Chuck 15.9.2008, 20:21 | ||
| Доброго времени суток, друзья. Есть в БД таблица sections --------------------- section_id section_parent section_name Которая содержит данные о секциях в древовидной структуре (каждый элемент, кроме головных, имеет ID родительской секции). Задача состоит в том, чтобы написать функцию, которая бы вытаскивала из этого списка только те секции, section_parent которых равен определенному значению. Был написан вот такой вот тестовый скрипт:
Однако, при выполнении данного кода перл-интерпретатор просто зависает. Пожалуйста, подскажите, в чем причина и как правильно реализовать задачу. |
| Автор: nitr 16.9.2008, 01:00 |
| Chuck, считаю что зависание в вашем рекурсив.обходе - sub get. |
| Автор: Chuck 24.9.2008, 09:15 |
| Простите, не понял. Я понимаю, что зависает именно в этой функции, однако, как этого избежать? |
| Автор: nitr 24.9.2008, 16:13 | ||
покажите здесь
|
| Автор: Chuck 3.10.2008, 23:54 | ||
| Извиняюсь, что пропал, была командировка. Дампер вывел вполне адекватные результаты, на мой взгляд. На что я должен обратить внимание?
|
| Автор: ginnie 4.10.2008, 09:12 | ||
Chuck, мне кажется, что с такими данными у Вас в строке
должно быть сообщение об ошибке, про невозможность использования undef в качестве ссылки на хэш. Кроме того, в этой строке правильнее использовать == вместо eq, т.к. сравниваются числовые значения. |
| Автор: Chuck 4.10.2008, 13:02 |
| ginnie, вы правы, но скрипт все равно зависает. Мне кажется, это потому что я использую fetchrow_hashref(); И не правильно работаю со ссылками. Но вот как тут разобраться - не понимаю. nitr, ваш скрипт работает, и сопоставив функции get() мою и вашу, я понял, что проблема не в ней, а в том, что я храню в массиве ссылки. |
| Автор: nitr 4.10.2008, 13:26 |
| Chuck, я склоняюсь к формированию структуры! Если немного измените мой скрипт, он сразу же зависнет Добавлено через 53 секунды Подскажу - в структуре, а точнее @sections Добавлено через 1 минуту и 32 секунды это нормально, что вы там ещё хранить хотели ;) ? |
| Автор: Chuck 6.10.2008, 07:47 |
| Доброе утро, на ум приходит только одно: элементы массива реализовать ссылками на хеши. |
| Автор: unicross 6.10.2008, 12:27 | ||||
Добавьте одну строку в функцию get()
|
| Автор: ginnie 6.10.2008, 13:03 | ||||||
unicross, это где же Вас такому научили?
у нас все пишут
или
|
| Автор: unicross 6.10.2008, 14:20 | ||
Да. Так будет правильнее
Sorry. Еще не проснулся... |
| Автор: nitr 6.10.2008, 17:46 | ||
у вас иначе? У вас формирование имхо неверное, там совсем маааленькая ошибка. которая ведет к такой большой. Возможно у вас первые три элемента зацикливают... что вам это дает? Проверьте. |