А по-русски, платформонезависимый фреймворк для создания многозадачных и сетевых приложений на Perl.
POE позволяет достаточно просто и быстро создавать многозадачные приложения, особо не задумываясь об управлении процессами и другими приятными вещами, с которыми приходится сталкиваться при желании написать многозадачное приложение. Всю эту нагрузку на себя берет POE, мы лишь описываем, что мы хотим делать. В большинстве случаев все приложение выполняется одним процессом, но при необходимости, POE умеет порождать дочерние процессы и общаться с ними.
Никогда бы не подумал, что буду что-то про верстку. Но жизнь штука странная. Да и люди бывают не очень продвинутые в web-технологиях и просят сделать вроде бы простые, но на первый взгляд невозможные вещи.
Думаю, все знают стандартный элемент формы для загрузки файлов. Вот он
А вот теперь попробуйте сделать его красивым. "Легко, ведь есть CSS!!!" - скажут многие, и многие будут правы. Но попробуйте сделать так
Слабо? Вот и мне сначала было слабо. Ведь заменить этот элемент нечем, этого требует безопасность. Вы же ведь не хотите, чтобы страничка умела сама по себе загрузить Ваш файл? Не найдя у себя в голове и в документации решения этой проблемы я решил спросить у Яндекса. Говорят там найдется все. И правда, нашлось. Ответ был короток: "Никак. Или так." Ничего больше Яндекс не нашел. Я изучил эту статью, но сделать как там у меня не получилось, видимо и не особо хотелось. Особо насторожил большой скрипт, который, при ближайшем рассмотрении, как оказалось, делает одну простую и не понятно зачем нужную вещь. Он просто ищет все элементы типа file и оформляет их как положено. Но зачем нам такая радость, если у нас на странице целых 3 таких элемента? Правильно - не надо нам такого. Еще очень не понравился пример работы этой радости (самый последний по той ссылке). Сами попробуйте и поймете. Вот я и решил воспользоваться не самим способом, а только его идеей. За что огромное спасибо Michael McGrady. И у меня получилось. Причем от скрипта не осталось и следа.
Вот блин...
Неожиданно наткнулся на одну проблемку.
При написании скрипта на Perl нашел то ли баг, то ли не знаю что в модуле POE::Component::Client::HTTP. Дело в том, что во время выполнения запроса при получении объекта HTTP::Response в заголовке запроса исчезают куки. Вернее не исчезают, а остается только последняя. В версии клиента 0.57 (именно она ставится при помощи модуля ppm) все было нормально, в версиях 0.79 и 0.80 (последняя на сегодня) этот "баг" был мной обнаружен. Сейчас буду изучать код в поисках истины.
Нашел.
Перебрал весь код POE::Component::Client::HTTP. А дело оказалось даже не в нем
Проблема в POE::Filter::HTTPHead строка 90.
$self->[WORK_RESPONSE]->header($1, $2);
Дело в том, что метод header добавляет заголовок в объект HTTP::Response, но если такой заголовок уже есть, он перезаписывается.
После обработки этим фильтром мы получим:
HTTP/1.1 200 OK
Cache-Control: no-cache, pre-check=0, post-check=0
Connection: Close
Date: Mon, 22 Jan 2007 10:19:49 GMT
Pragma: no-cache
Server: Apache/2.0.53 (ASPLinux)
Content-Type: text/html; charset=WINDOWS-1251
Expires: 0
Set-Cookie: phpbb2mysql___u=a%3A0%3A%7B%7D; expires=Tue, 22 Jan 2008 10:19:50 GMT; path=/;
Т.о. мы потеряли все куки кроме последней.
Исправляется данная проблема просто. В строке 90 вместо $self->[WORK_RESPONSE]->header($1, $2) пишем $self->[WORK_RESPONSE]->push_header($1, $2).