Удивление, удивление-два и привычка :)
Был удивлен, но оказывается
AnyEvent/EV не позволяет выполнять вложенные condvar, получается рекурсия.
Вложенные кондвары не нужны, код легко модифицировать на работу либо с одним (самое главное send вызвать в самый последний момент, чтобы вся асинхронная работа была выполнена), либо с несколькими, тогда вызовы должны быть последовательными.
Пример.
Так же был удивлён, что
AnyEvent::HTTP автоматически заполняет заголовок Referer у запроса (для работы по умолчанию это лишнее) и не искейпит символы в урле (очень плохо,
LWP::UserAgent и/или
PoCo::Client::HTTP это делают на автомате, т.к. используют
HTTP::Request).
За последнее время я так привык работать с
Mojo (напомню, Mojo – pure perl http-фреймворк, "почти" без зависимостей, "веб в коробке"), что при возникновение задач вне окружения Mojo, которые связаны с перекодированием символом, не задумываясь, использую модуль
Mojo::ByteStream. Например, для искейпинга символов в урле (проблема с AnyEvent::HTTP) использую следующий код:
Mojo::ByteStream->new($str)->url_escape
Для перевода html-последовательности символов вида Г в печатные символы использую следующий код:
Mojo::ByteStream->new($str)->encode('utf8')->html_unescape
Очень удобно и не надо вспоминать, в каком модуле реализован данный функционал.
use Perl or die;
JFDI