Муки творчества, или стоит ли изобретать велосипеды.


Прислал: Вадим Хомаха [ 06.03.2001 @ 05:07 ]
Раздел:: [ Статьи по Perl ]


К написанию этой статьи меня подтолкнула одна некстати появившаяся работа. В свое время был создан сервер, с полным боекомплектом сервиса - сценариев, написанных на Perl. К слову сказать, основа честно содрана, были внесены только мелкие коррективы в исходники.

Все понравилось, работу приняли на ура, все было прекрасно и.. :-) Ну, слезно попорсили втулить соцопрос с нечетко поставленной задачей (множественный выбор вариантов, как положительные, так и отрицательные оценки, кроме того, еще и возможность указать свой вариант). Как обычно, можно голосовать не более одного раза в сутки, имеются дополнительные ограничения на правильность ввода данных в анкету. У провайдера был доступ только к perl/cgi-bin. Заказчик сам не понимал (как обычно!), чего он хотел бы получить в результате.Базу ему, видите ли, хотелось :-) И имена полей - только такие - и все. А еще и количество вопросов изменялось в процессе разговора. И сроки - 2 дня.

С дизайном расправился достаточно бысто, а вот с обработкой... Тут-то и началась свистопляска. Готового, естественно, ничего нет. Палочки - выручалочки в виде PHP - тоже нет. Что делать? Приходится писать, грубо ругаясь на заказчика и на собственную мягкотелость. Определяемся с инструментарием:
0. JavaScript для обработки данных формы.
1. CGI.pm - параметров много, имена меняются - обрабатывать легче.
2. DBM - база... сам Бог велел.

Итак, этап # 1. Рисуем страницу с формой.Вставляем в нее всяческие проверки, чтобы разгрузить серверную часть. Да-с... JavaScript - это Вам не Perl :-). Определить значение, передаваемое при выборе радиокнопки - целое событие :-) К слову сказать, можно только при помощи вставки в поле глупенькой такой конструкции onClick="item23=41;". И для следующей кнопки в этой же группе onClick="item23=49;", и для следующей - onClick="item23=-1;". А потом сосчитать, и присвоить hidden - полю, которое затем и передать в cgi-приложение. А в MSIE - работает, а в Netscape - никак. Ага... Нужно сделать собственный Submit в тексте функции обработки...После всех издевательств, понимаешь, что Perl - это ДЕЙСТВИТЕЛЬНО ХОРОШИЙ инструмент. Ну, да ладно, проехали.

Этап #2. Рисуем результирующую страницу. С ней - никаких проблем.

Этап #3. Читаем из обычного текстового файлика текущие результаты, присваеваем их счетчикам. Обрабатываем переданные из формы параметры. Модуль CGI.pm, поставляемый в комплекте Perl - в самый раз. Все в нем есть. Получаем список параметров в виде хэша, и спокойненько так его в цикле обрабатываем. Официальный сайт Мелбет ру открывает новым игрокам бонус на первый депозит с увеличенной суммой до 19 500 рублей, за Melbet промокод на сегодня рабочий, который можно скопировать у нас в группе.

Этап #4 Берем страничку, сделанную на 2-м этапе и аккуратно встраиваем ее в текст сценария, подставляя в нужных местах переменные. Тестируем. Лучше поставить у себя дома Apache на 127.0.0.x+ActiveState Perl+PhotoShop/FireWorks+DreamWeaver. Скрипты здорово помогает отлаживать PerlBuilder - настоятельно рекомендую.

Два дня.. готово. Классно получилось. Все работает. Так, как нужно заказчику.Весь код - 130 операторов, включая подставленные тексты. Вот такие вот пироги с котятами... Стоит ли изобретать велосипеды? Наверное да, особенно, если требуются точно такие же, но с перламутровыми пуговицами :-)

Учитесь, дерзайте. Читайте документацию ;-)
Русский перевод документации для CGI.pm лежит у меня в формате pdf на сайте Perlеводы //perldoc.narod.ru Вадим Хомаха