Выпуск 24. Февраль 2015
← Perl 6, или Get ready to party | Содержание | Интервью с Нилом Бауэрсом (Neil Bowers) →Обзор CPAN за январь 2015 г.
Рубрика с обзором интересных новинок CPAN за прошедший месяц.
В этом месяце заметно выросло число обновлённых модулей, что отчасти является следствием проводимого конкурса 2015 CPAN Pull Request Challenge.
Статистика
- Новых дистрибутивов — 252
- Новых выпусков — 1222
Новые модули
Shell::Tools
Shell::Tools отличное подспорье администраторам при написании небольших скриптов на Perl. При включении модуля загружается множество полезных функций для работы с файлами, каталогами, например, функции cwd, abs_path, basename, copy, make_path, tempfile и множество других. Кроме того, модуль автоматически добавляет функции VERSION_STRING и HELP_MESSAGE, которые соответственно вызываются, если указываются параметры скрипта --version и --help. Версия берётся из переменной $VERSION, а текст помощи из встроенной POD-документации скрипта.
Mojo::Reactor::POE
Mojo::Reactor::POE позволяет использовать модуль POE в качестве бекенда для обработки событий в Mojo::IOLoop. Необходимо лишь задать переменную окружения MOJO_REACTOR до загрузки Mojo::IOLoop:
BEGIN { $ENV{MOJO_REACTOR} ||= 'Mojo::Reactor::POE' }
use Mojo::IOLoop;
FFI::Me
Модуль FFI::Me предоставляет удобный способ вызывать функции из C-библиотек, не применяя XS-магии. Модуль базируется на FFI::Raw и просто добавляет немного синтаксического сахара для удобства использования:
package My::Trig;
use FFI::Me;
...
ffi cosine => (
lib => 'libm.so'
rv => ffi::double,
arg => [ffi::double],
sym => 'cos',
method => 1,
);
package main;
my $trig = My::Trig->new;
$trig->cosine(2.0);
HTML::Differences
Модуль HTML::Differences даёт вменяемый способ найти различия между двумя HTML-файлами или фрагментами HTML-документов. Под капотом используется HTML::Parser, таким образом применяется разбор тегов и строится модель HTML-документа. Для построения различий игнорируются лишние пробелы (за исключением текста в <pre>), начальные теги нормализуются, сортируются их атрибуты. Отсутствующие закрывающие теги не добавляются автоматически, поэтому они будут видны в выводе отличий двух документов. Отличия в блоках комментариев также будут видны, но можно задать флаг для игнорирования различий в них.
Plack::App::Hostname
Plack::App::Hostname позволяет организовать функцию виртуального хостинга в PSGI-приложении: вызов приложения, в зависимости от имени, указанного в запросе заголовка Host.
DTL::Fast
Модуль DTL::Fast — это реализация языка шаблонов Django для Perl. Реализована поддержка большинства тегов, но есть определённые несовместимости с оригинальной спецификацией. Приведены результаты бенчмарков, по которым DLT::Fast работает на 80% быстрые, чем оригинальный питоновский шаблонизатор Django.
Crypt::Spritz
Марк Леманн представил реализацию нового поточного шифра Spritz для Perl. Алгоритм Spritz уникален тем, что имеет многостороннее применение: и как потоковый шифр, и как генератор случайных чисел, хеш и аутентифицированное шифрование.
Data::Fake
Модуль Data::Fake позволяет генерировать случайные данные разных типов, использую декларативный синтаксис, например:
fake_name() --- произвольное имя
fake_sentences(1) --- произвольное предложение
fake_past_date("%Y-%m-%d") --- произвольная дата в прошлом
Модуль позволяет создавать не только простые структуры данных, но также хеши и массивы. Основное применение — данные для тестов.
FFI::Platypus
Platypus (с англ. утконос) — это ещё один модуль для динамического вызова функций библиотек на С/C++ в Perl без использования XS. Данная реализация использует библиотеку libffi. Platypus имеет хорошо продуманную систему типов, которая позволяет работать не только с простыми типами int, float и прочими, но и со сложными структурами данных.
Plack::I18N
Модуль Plack::I18N позволяет добавить поддержку интернационализации в ваше веб-приложение. Поддерживаются как традиционные po-файлы переводов gettext, так и pm-файлы модуля локализации Locale::Maketext.
Модуль включается в приложение как прослойка Plack::Middleware::I18N, которая позволяет определять предпочитаемый язык веб-клиента (по PATH_INFO, сессии, http-заголовка Accept) и соответствующим образом формировать переменную окружения plack.i18n.
Обновлённые модули
Dancer2 0.158000
Новая версия Dancer2 вышла в первый день нового года. В новом релизе включены несколько важных исправлений, в том числе правильный импорт прагмы utf8 в код приложения, что само по себе очень поучительно и полезно знать каждому Perl-программисту.
DateTime 1.18
В новом релизе добавлены данные о новой секунде координации, которая будет добавлена 30 июня 2015 г. Ждём новых зависаний серверов этим летом.
Twiggy 0.1025
Новый релиз асинхронного веб-сервера Twiggy исправляет ошибку, когда во время потоковой передачи клиент неожиданно завершает соединение, что приводит к остановке всего процесса веб-сервера.
perlsecret 1.012
Новый релиз секретных операторов Perl содержит описание нового секрета — Змей-искуситель (Serpent of truth).
my $true = ~~!! 'a string'; # 1
my $false = ~~!! undef; # 0
Он составлен из двух операторов: ~~ (червяк) и !! (пиф-паф) и аналогичен по действию оператору 0+!! (ключ к правде). Позволяет превратить логическое значение в цифровое.
Cpanel::JSON::XS 3.0115
Обновлённый Cpanel::JSON::XS содержит исправление ошибки при кодировании вложенных объектов методом FREEZE, которая могла приводить к повреждению стека и аварийному завершению процесса. Скорее всего проблема присутствует и в оригинальном JSON::XS, но о его исправлении ничего неизвестно.
Markdent 0.25
Парсер Markdown-разметки Markdent теперь генерирует HTML-документ в соответствии с спецификацией HTML 5. Также исправлена ошибка с использованием закрывающего тега </th> для всех ячеек при генерации таблиц.
DBD::Pg 3.5.0
DBD::Pg — драйвер базы данных PostgreSQL для DBI DBD::Pg теперь поддерживает экранирование символа подстановки ?. Например, следующий запрос содержит JSONB-оператор ? и один символ, который будут заменён значением:
SELECT '{"a":1, "b":2}'::jsonb \? ?
IO::Socket::SSL 2.010
В новом релизе IO::Socket::SSL появилась поддержка расширения ALPN, которое используется в протоколе HTTP2 (требуется openssl ≥ 1.02, Net::SSLeay ≥ 1.56). Удалено анонсирование слабого шифра RC4.
perl 5.21.8
Выпущен девятый релиз Perl для разработчиков 5.21.8. Среди новшеств стоит отметить новый флаг регулярных выражений n, который отключает захват и заполнение переменных $1, $2 и т.д. внутри групп:
"hello" =~ /(hi|hello)/n; # $1 не устанавливается
Появился экспериментальный атрибут const для анонимных функций, который тут же запускает функцию, фиксирует возвращаемое значение и возвращает функцию-константу:
*INLINED = sub : const { $x }
Таким образом, даже если переменная $x будет изменена в будущем, функция INLINED всегда будет возвращать только то значение, которое было в момент присвоения INLINED.
Появилось несовместимое изменение для экспериментальных сигнатур, теперь прототип необходимо указывать не до, а после сигнатуры, что является более естественным:
sub sum ($left, $right) : prototype($$) {
return $left + $right;
}
Несколько обескураживающим выглядит изменение в прагме warnings. Теперь появились предупреждения вне категории all. Дерево категорий теперь выглядит так:
everything -+
|
+- all -+
|
.........
|
+- extra -+
Теперь, чтобы охватить все-все-все возможные предупреждения придётся писать
use warnings 'everything';
Font::FreeType
Описание прислал basiliscos, который теперь сопровождает модуль Font::FreeType
После 10 лет стагнации обновился модуль Font::FreeType, который представляет собой Perl-обвязку для библиотеки FreeType2. FreeType2 является кроссплатформенным высококачественным движком для работы с векторными и растровыми шрифтами разных типов (ttd, odf, bdf и др.). Например, есть возможность рендеренга глифов шрифтов.
В новой версии Font::FreeType:
- исправлена сборка и компиляция модуля для более современных версий библиотеки FreeType2;
- демонстрационный скрипт
examples/font-info.plвыводит больше информации, напоминая вывод ftdump из набора демонстрационных утилит FreeType; - возможность получения дополнительных метрик шрифтов, таких как высота шрифта (
text_height), размер глифов, находящихся над и под базовой линией (ascender и descender), ограничивающего минимального прямоугольника (bounding box); - возможность доступа к таблицам кодировок шрифтов (
CharMap); - возможность получения мета-информации о шрифте (
NamedInfo), такой как авторские права, лицензия, сайт автора шрифтов и т.п.
Modern::Perl 1.20150127
Модуль Modern::Perl традиционно выходит в начале года. Теперь запись
use Modern::Perl '2015';
включает новые возможности релиза perl 5.20.
← Perl 6, или Get ready to party | Содержание | Интервью с Нилом Бауэрсом (Neil Bowers) →
