Выпуск 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) →