Последнее в категории Разработка

1 июля в рассылке Moscow.pm обсуждалась работа с XS. Краткое содержание дискуссии:

— Как нужно правильно кастовать полученный объект к нужному типу, чтобы с ним можно было работать?

(A*)(SvIV((SV*)SvRV(cppObject))).

— Большое спасибо. Все заработало.

Много лет назад, когда еще не было интернета, я слышал историю о том, что то ли американские, то ли советские ученые потеряли спутник из-за опечатки в программе: вместо запятой стояла точка (или точка с запятой, или вообще не было запятой).

Никогда не думал, что история повторится со мной лично, к счастью, не в таких масштабах и с куда меньшими (фактически, нулевыми) последствиями.

После переделки скрипта (тех же времен, что и история со спутником) вместо точки с запятой оказалась запятая:

my $user = new XML::LibXML::Element('user'),
$messagelist->appendChild($user);

При компилировании крамола не выявлялась, но при выполнении возникала ошибка, что узел еще не узел:

XML::LibXML::Node::appendChild() -- nNode is not a blessed SV reference

Perl из XSLT — 2

| Нет комментариев

Страх преодолен. Мы официально используем вызовы Perl-функций из XSLT, преобразуемого из перла.

sub register_functions {
    my $xslt = shift || 'XML::LibXSLT';
    my $ns = 'http://whoyougle.com';
    $xslt->register_function($ns, 'uri-encode',
         \&URI::Escape::uri_escape_utf8);
    $xslt->register_function($ns, 'js-encode', 
         \&escapeJS);
    $xslt->register_function($ns, 'declension',
         \&Lingua::RU::Numeric::Declension::numdecl);
}

Соответственно, в нужных местах теперь достаточно написать

<a href="{w:uri-encode(@href)}">
    <xsl:value-of select="text()"/>
</a>

Функция, склоняющая слова после числительных, написанная на XSLT, осталась только в архивах :-)

Теперь хочется сравнить производительность чисто-XSLT-решения, решения, когда перл готовит все данные сам, и случая, когда из XSLT мы вызываем функции на Perl.

Кстати, оказалось, что libxslt регистрирует все функции в одной куче, вплоть до того, что их возможно регистрировать не на инстансе парсера (созданном вызовом new XML::LibXSLT), а непосредственно через функцию модуля:

XML::LibXSLT->register_funcion(...);

CPAN vs. GitHub

| Комментариев: 3

Во французском блоге про Perl недавно появилось сообщение о том, как автор написал для себя несколько модулей, чтобы было удобно сохранять HTML-файлы для чтения в электронной книге.

Приводятся ссылки на четыре модуля, и все они лежат на гитхабе. А модули-то интересные, например, HTML::Image::Size.

Сформулирую мысль кратко и в тезисах.

  • Github дает удобные инструменты для работы над кодом, но поди догайся, что нужно искать модуль именно там.
  • CPAN позволяет более или менее удобно искать, но, разумеется, спан не заглядывает на гитхаб. И самое плохое, что процесс регистрации на нынешнем PAUSE весьма не дружелюбный.
  • Две точки входа размывают единое пространство имен, что когда-нибудь может привести к появлению двух разных, но одинаково названных модулей.

Страницы

  • img

Об архиве

Эта страница содержит последние записи категории Разработка.

Предыдущая категория — Развлечения.

Следующая категория — Регулярные выражения.

Смотрите новые записи на главной странице или загляните в архив, где есть ссылки на все сообщения.