понедельник, 12 сентября 2011 г.
вторник, 22 февраля 2011 г.
Module::CoreList - простой способ посмотреть поставляемые с перлом модули
Открыл для себя Module::CoreList.
Можно очень просто посмотреть, какие модули входят в поставку различных версий Perl.
Список версий Perl:
Список модулей для конкретной версии:
Можно очень просто посмотреть, какие модули входят в поставку различных версий Perl.
Список версий Perl:
corelist -v
Список модулей для конкретной версии:
corelist -v v5.10.1 | less
среда, 24 марта 2010 г.
Открыл для себя Inline::C
Как известно подключение С кода к Perl достаточно трудоемкое и реализуется через Perl XS. И меня эта сложно перодалимая стена останавливает, хотя конечно очень хочется писать быстрые модули. И вот недавно узнал про Inline::C.
Сам модуль Inline представляет собой фреймворк для поключения любого языка программирования к перлу. В часности Inline::C позволяет поключать C код. При первом запуске скрипта происходит компилирование C кода, при последующих запусках проверяется, изменился ли код или нет. Если не менялся, то компиляция не происходит.
После прочтения perlapi вполне можно писать полноценные сишный код, работающий с перловыми хешами массивами. И вообще можно сделать все что угодно. И уже после небольшой практики с Inline::C можно будет перейти к изучению XS. Подозреваю, что освоить его будет гораздо проще.
Вот написал простенький примерчик, разворачавающий строки вида "a-z0-9" в последовательности символов. На качество C кода не смотреть, я его плохо знаю.
Сам модуль Inline представляет собой фреймворк для поключения любого языка программирования к перлу. В часности Inline::C позволяет поключать C код. При первом запуске скрипта происходит компилирование C кода, при последующих запусках проверяется, изменился ли код или нет. Если не менялся, то компиляция не происходит.
После прочтения perlapi вполне можно писать полноценные сишный код, работающий с перловыми хешами массивами. И вообще можно сделать все что угодно. И уже после небольшой практики с Inline::C можно будет перейти к изучению XS. Подозреваю, что освоить его будет гораздо проще.
Вот написал простенький примерчик, разворачавающий строки вида "a-z0-9" в последовательности символов. На качество C кода не смотреть, я его плохо знаю.
use Inline C => DATA;
seq("1-3a-zv-d");
__DATA__
__C__
#include <stdio.h>
#include <string.h>
void print_seq(char start_s, char fin_s);
int seq(char* str) {
char start_s = '\0';
char fin_s = '\0';
int i;
for ( i = 0; i < strlen(str); i++ ) {
char s = str[i];
if ( s == '\0' ) break;
if ( s != '-' ) {
if (!start_s )
start_s = s;
else {
fin_s = s;
print_seq(start_s, fin_s);
start_s = fin_s = '\0';
}
}
}
return 0;
}
void print_seq(char start_s, char fin_s) {
int flag = start_s < fin_s ? 1 : 0;
while( start_s != fin_s ) {
printf("%c ", start_s);
start_s += flag ? 1 : -1;
}
printf("%c\n", fin_s);
}
пятница, 5 февраля 2010 г.
SDL_perl
Оказывается на перле можно писать игры. Когда-то давно я пробовал играться с OpenGL на перле. Простые вещи работали довольно шустро, а вот что-нибудь посложней - крайне медленно. Пробовал экспортировать из 3Dmax поверхности, скрипт отрисовывал их быстро, но вот если их начать крутить, выполнять с ними какие-то манипуляции, то все крайне тормозило.
А тут наткнулся на SDL_perl. Это конечно не 3D, но сделать онлайн 2D игрушку вообще без проблем. И работать будет прекрасно.
Сайт проекта sdl.perl.org
А тут наткнулся на SDL_perl. Это конечно не 3D, но сделать онлайн 2D игрушку вообще без проблем. И работать будет прекрасно.
Сайт проекта sdl.perl.org
cpan dot
Узнал очень классную возможность скрипта cpan.
Если скачать любой дистрибутив модуля и запустить в каталоге дистрибутива
Вот такой мощный cpan!
Если скачать любой дистрибутив модуля и запустить в каталоге дистрибутива
cd Some-Module-2.3Тогда этот модуль установится :)
sudo cpan .
Вот такой мощный cpan!
вторник, 28 июля 2009 г.
Мой первый модуль на CPAN
Вот оно и случилось!
Залил на CPAN свой первый модуль Net::Whois::Parser. Модуль парсит ответы whois серверов и возвращает хеш данных о домене. Идея модуля возникла, когда мне понадобилось получать стандартизированные данные о домене. Поискав на CPAN, обнаружил там 2 модуля со схожими функциями: Net::Whois и Net::ParseWhois. Первый из них совсем не поддерживается, последняя версия датирована 1999 годом. Второй поддерживается, но тот функционал, который он предоставляет и охват whois серверов крайне мал.
Патчить этот модуль не представлялось возможным, т.к. его тогда пришлось полностью переписывать, а на это авторы не пошли бы ( наверно ). Время поджимало, работа стояла на месте... И я решил написать свой модуль и выложить его на CPAN. На написание базового кода ушел день, потом тестирование, переделки/доделки. И вот сегодня мой модуль вышел в свет.
Немного технических подробностей
На данный момент реализован парсер по умолчанию, который находит в тексте whois ответа пары вида key: value\n и пишет их в хеш.
Стандартизированы следующие ключи:
В дальнейшем планируется расширить список стандартных полей. Также есть возможность добавлять свои собственные парсеры и конвертацию названий полей. Возможность эта пока доступна через переменные модуля.
Залил на CPAN свой первый модуль Net::Whois::Parser. Модуль парсит ответы whois серверов и возвращает хеш данных о домене. Идея модуля возникла, когда мне понадобилось получать стандартизированные данные о домене. Поискав на CPAN, обнаружил там 2 модуля со схожими функциями: Net::Whois и Net::ParseWhois. Первый из них совсем не поддерживается, последняя версия датирована 1999 годом. Второй поддерживается, но тот функционал, который он предоставляет и охват whois серверов крайне мал.
Патчить этот модуль не представлялось возможным, т.к. его тогда пришлось полностью переписывать, а на это авторы не пошли бы ( наверно ). Время поджимало, работа стояла на месте... И я решил написать свой модуль и выложить его на CPAN. На написание базового кода ушел день, потом тестирование, переделки/доделки. И вот сегодня мой модуль вышел в свет.
Немного технических подробностей
На данный момент реализован парсер по умолчанию, который находит в тексте whois ответа пары вида key: value\n и пишет их в хеш.
Стандартизированы следующие ключи:
$info = {
domain => 'example.com',
nameservers => [
{ domain => 'ns1.example.com', ip => '1.10.100.25' },
{ domain => 'ns1.example.com' },
],
emails => [ 'admin@example.com', 'info@exmaple.com' ],
};
В дальнейшем планируется расширить список стандартных полей. Также есть возможность добавлять свои собственные парсеры и конвертацию названий полей. Возможность эта пока доступна через переменные модуля.
Подписаться на:
Сообщения (Atom)