Говоря только с точки зрения API, я предпочитаю LWP. Проблема с Curl состоит в том, что он очень очевидно сделан из библиотеки C. Например:
$curl->setopt(CURLOPT_URL, 'http://example.com');
my $response_body;
$curl->setopt(CURLOPT_WRITEDATA, \$response_body);
my $retcode = $curl->perform;
if ($retcode == 0) {
# Response is now in $response_body
}
else {
die "Error\n";
}
Настройка параметров с помощью setopt()
? Возвращать ответ, используя ссылку на один из этих параметров? Наличие метода, возвращающего 0 в случае успеха? Эти вещи идиоматичны в коде C, но не в современном OO Perl.
Вот примерно тот же код в LWP:
my $response = $lwp->get('http://example.com');
if( $response->is_success ) {
$response_body = $response->decoded_content;
}
else {
die "Error\n";
}
Призыв к is_success()
более самодокументирован и лучше сочетается с языком OO. C-кодеры привыкли видеть код вроде if($retcode == 0)
в случае успеха по историческим причинам, но нет никаких причин, по которым Perl-кодеры должны использовать эту привычку. Выше также показано, как LWP легко заботится о декодировании контента для нас, что Керл оставляет за вами.
Это не показано выше, но Curl также заставляет вас самостоятельно обрабатывать параметры GET / POST. В LWP вы передаете хеш, и он разбивает пары name=value
для вас. Печенье тоже. Керл очень низкий уровень в этом смысле.
Скручивание может быть быстрее, но спросите себя, насколько это будет иметь значение в вашем приложении. Вы действительно собираетесь отправить 100 запросов за короткий промежуток времени? Если так, то Керл вполне может стоить того. Если нет, то перейдите к простоте реализации, которая, я думаю, LWP победит без особой борьбы.