FastNetMon

Показаны сообщения с ярлыком Perl. Показать все сообщения
Показаны сообщения с ярлыком Perl. Показать все сообщения

воскресенье, 20 декабря 2009 г.

Обновление всех CPAN модулей


cpan
cpan shell -- CPAN exploration and modules installation (v1.9402)
Enter 'h' for help.
cpan[1]> upgrade

Суперскоростная установка CPAN модулей

Для автоматического ответа на все запросы CPAN есть хак:

PERL_MM_USE_DEFAULT=1 cpan Catalyst

суббота, 19 декабря 2009 г.

Perl vs Python

Взял наобум кусок кода на Perl (из дистрибутива ISPManager, так что все копирайты их Программистов).

Вот вариант на Перле: http://paste.org.ru/?sa0zf2, вот на Python: http://paste.org.ru/?kg8anl

пятница, 21 августа 2009 г.

Сборка HTTP::HeaderParser::XS под Centos x86_64

На Центос 5.3 x86_64 при попытке поставить указанный модуль получаем следующее:

mkdir /tmp/suxx
cd /tmp/suxx
wget http://search.cpan.org/CPAN/authors/id/M/MA/MARKSMITH/HTTP-HeaderParser-XS-0.20.tar.gz
perl Makerfile.PL
make install


и получаем кучу ошибок.

Фиксим:
1009 строка файла HTTPHeaders.c:

-const char* file = __FILE__;
+char* file = __FILE__;


Снова запускаем: make install

суббота, 25 апреля 2009 г.

Установка Perl модулей со свалившимися тестами

Нередко при установке Perl модулей с CPAN можно увидеть следующее:
Failed 2/13 test scripts

и установка на этом прекращается.

Что это означает? Это означает, что автор либо забыл исправить тесты, внеся новую функционалньость, либо в коде на самом деле баг, чаще всего все же первое (баг в тестах) и можно не особо беспокоясь поставить модуль насильно, для этого:

sudo cpan # запускаем оболочку CPAN
force install DBIx::Class::Schema::Loader


Если же вы довольно хорошо знаете Перл, то очень хорошим тоном будет сообщить о падении тестов для модуля через rt.cpan.org и в идеале прислать патч авторам, исправляющий косяк :)

вторник, 24 марта 2009 г.

Perl + locale + Debian

Довольно часто на Дебияне вываливается вот такая хрень:

perl -v
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LANG = "ru_RU.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").



Временное решение: export LANG=C и потом perl -v
Постоянное решение: открываем файл /etc/environment и добавляем там строку: LANG=C

суббота, 14 марта 2009 г.

Работа с MemcachDB из Perl Cache::Memcached::Fast

В документации сказано, что MemcacheDB поддерживает протокол обмена своего старшего брата -- Memcached`а. Но, как следовало ожидать, функции поддерживаются далеко не все:
* get(also mutiple get)
* set, add, replace
* append/prepend
* incr, decr
* delete
* stats

Далее нам это надо будет учитывать при использовании модуля Cache::Memcached::Fast (который вам предстоит поставить с CPAN).

Вот простейший пример работы с MemcacheDB:

#!/usr/bin/perl

use strict;
use warnings;

use Cache::Memcached::Fast;

my $memd = new Cache::Memcached::Fast( {
servers => [ { address => 'localhost:7777' } ],
} );

$memd->set("some_key", "some data");
print $memd->get("some_key");



А сейчас давайте попробуем внести 2 миллиона записей в базу (2 млн уникальных ключей, значения поставим равными ключам + некий набор символов, суммарный размер ключей -- 33 102 046 байт (ок 32 мегайбайт), данных чуть больше). Платформа для теста: 4 * Intel(R) Xeon(R) CPU E5420 @ 2.50GHz + 8Гб памяти + SATA винты в RAID1 + Centos5. Перед началом теста БД занимала 28 мегабайт.

Итого время добавления 2 млн записей следующее:
time ./work_db.pl
real 2m35.559s
user 0m6.060s
sys 0m13.745s

Т.е. ~14 000 записей в секунду скорость записи.

Протестируем скорость чтения, просто получим ключи, которые возьмем из файла:

time ./work_db.pl
some data
real 1m46.386s
user 0m9.637s
sys 0m23.029s

Т.е. скорость чтения около ~18 000 записей / в секунду

Кстати, а статистику работу MemcacheDB можно посмотреть опять же Телнетом:

telnet localhost 7777
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
stats
STAT pid 7673
STAT uptime 859
STAT time 1236987371
STAT version 1.2.0
STAT pointer_size 64
STAT rusage_user 3.684439
STAT rusage_system 19.183083
STAT ibuffer_size 512
STAT curr_connections 5
STAT total_connections 256615
STAT connection_structures 9
STAT cmd_get 4
STAT cmd_set 14623
STAT get_hits 4
STAT get_misses 0
STAT bytes_read 14110820
STAT bytes_written 6402248
STAT threads 4
END


Итого, мы получили ~18 000 записей / секунду при чтении, а при записи ~14 000 записей / секунду.

Errata: немного переклинило и считал минуты по 30 секунд, исправил, значения стали меньше :)

пятница, 14 ноября 2008 г.

HTML::Template vs Template::Alloy

Встала необходимость заменить HTML::Template на что-то более удобоваримое (кроме TT), заменили, довольны :)

Вот пример кода:
http://paste.org.ru/?l6ybly где закомменчено -- H::T

А вот пример шаблона:
http://paste.org.ru/?1aju7w где [% %] -- Template::Alloy, где монструозные -- HTML::Template.

среда, 16 января 2008 г.

Немного о CPAN

Как удалить модуль с хранилища модулей (локального, конечно же) CPAN?

В общем случае никак (?), но бывают исключения. В конфигурационном файле CPAN (/usr/lib/perl5/5.8.8/CPAN/Config.pm) есть переменная ('build_dir'), отвечающая за расположение папки для временного хранения модулей перед установкой. Как можно понять, в этой папке хранятся инсталяцонные файлы модулей, которые представляют из себя стандартный комплект -- Makefile.PL / Build.pl и обычно уже созданный Makefile (т.к. данные модули уже были установлены Вами), который и устанавливает модуль в хранилище. А у Данного Make файла присутствует цель uninstall, т.е. можно выполнить make uninstall и либо удалить модуль сразу, либо получить рекомендации для удаления.

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


Конфигурирование CPAN.

CPAN при запуске очень любит доставать вопросами о конфигурации. Чтобы отучить его заниматься сим противным занятием давайте напрямую отредактируем конфиг файл /usr/lib/perl5/5.8.8/CPAN/Config.pm
(его расположение меняется от дистрибутива к дистрибутиву, так что если что проявите смекалку и отыщите его). Ниже привожу свой конфиг файл.


# This is CPAN.pm's systemwide configuration file. This file provides
# defaults for users, and the values can be changed in a per-user
# configuration file. The user-config file is being looked for as
# ~/.cpan/CPAN/MyConfig.pm.

$CPAN::Config = {
'build_cache' => q[100],
'build_dir' => q[/home/nrg/.cpan/build],
'cache_metadata' => q[1],
'cpan_home' => q[/home/nrg/.cpan],
'cpan_version_check' => q[1],
'dontload_hash' => { },
'ftp' => q[/usr/bin/ftp],
'ftp_proxy' => q[],
'getcwd' => q[cwd],
'gpg' => q[/usr/bin/gpg],
'gzip' => q[/bin/gzip],
'histfile' => q[/home/nrg/.cpan/histfile],
'histsize' => q[100],
'http_proxy' => q[],
'inactivity_timeout' => q[0],
'index_expire' => q[1],
'inhibit_startup_message' => q[0],
'keep_source_where' => q[/home/nrg/.cpan/sources],
'lynx' => q[],
'make' => q[/usr/bin/make],
'make_arg' => q[],
'make_install_arg' => q[],
'makepl_arg' => q[INSTALLDIRS=site],
'ncftp' => q[],
'ncftpget' => q[],
'no_proxy' => q[],
'pager' => q[/usr/bin/less],
'prerequisites_policy' => q[follow],
'scan_cache' => q[atstart],
'shell' => q[/bin/bash],
'tar' => q[/bin/tar],
'term_is_latin' => q[1],
'unzip' => q[/usr/bin/unzip],
'urllist' => [q[ftp://cpan.makeperl.org/pub/CPAN], q[ftp://cpan.nx1.ru/], q[ftp://cpan.rinet.ru/pub/mirror/CPAN/], q[ftp://ftp.aha.ru/CPAN/], q[ftp://ftp.chg.ru/pub/lang/perl/CPAN/], q[ftp://ftp.spbu.ru/CPAN/], q[http://ftp.silvernet.ru/CPAN/], q[http://mirror.rol.ru/CPAN/]],
'wget' => q[/usr/bin/wget],
};
1;
__END__


Вот примерно такой вид должен иметь наш конфиг файл, но в случае проблем при его использовании придётся переконфигурировать Цпан вручную, это делается довольно просто -- удаляем указанный конфиг файл Цпана и запускаем сам cpan :)

А вот для пользователей убунту данный конфиг стоит искать по адресу: /etc/perl/CPAN/Config.pm

Как бороться с ошибками вида: "Has already been unwrapped into directory /root/.cpan/build/ИМЯ_модуля-некая_уникальная_последовательность" ?

Такое бывает, когда сваливаются тесты модуля или Вы любите поэксперементировать с Цпаном. Это решается в лоб: rm -r /root/.cpan/build/ИМЯ_модуля-*

понедельник, 14 января 2008 г.

Новое в Перл 5.12 и немного о my и local

В то время, как весь мир судачит о грядущем Перл6, разработчики 5го Перла прикручивают очень вкусные фишки к языку, вот ссылочка с примерным списком нововведений.

Вот уже третий день усиленно вычитываю статьи на opennet.ru, вот сегодня наткнулся на очень хорошее описание разницы (хотя не совсем разницы, скорее указываются тонкости применения каждого из них) между my и local в Перл5, а вот и ссылка.

суббота, 12 января 2008 г.

Циклические ссылки и сборщик мусора в Perl (perl trash garbage)

Я, конечно, понимаю, что из-за одной ссылки делать целый пост аморально, но статья очень хорошая и для разработчика под mod_perl и FastCGI относится к разряду MUST READ, ссылка в студию: http://www.opennet.ru/base/dev/perl_destruction.txt.html

среда, 12 сентября 2007 г.

Скрипт транслитерации на Perl

=head
Отдельная благодарность alekciy`ю (http://alekciy.ru/projects/translit/) за ликбез по части ГОСТов.
Функа ts, предназначена для транслитерации в соответствии с ГОСТ 7.79-2000 (взамен ГОСТ 16876-71)
Хотя есть некоторые сомнения, как получу печатный вариант ГОСТа, тогда будет абсолютно точная версия.

Автор: nrg
Напиcано: Чтв Сен 13 00:04:14 SAMST 2007
Обратная связь: nrg@jabber.snc.ru, icq: 813-793.
=cut
sub ts($)
{
my%hs=('аА'=>'a' , 'бБ'=>'b'  , 'вВ'=>'v'  , 'гГ'=>'g', 'дД'=>'d' ,
'еЕ'=>'e' , 'ёЁ'=>'jo' , 'жЖ'=>'zh' , 'зЗ'=>'z', 'иИ'=>'i' ,
'йЙ'=>'j' , 'кК'=>'k'  , 'лЛ'=>'l'  , 'мМ'=>'m', 'нН'=>'n' ,
'оО'=>'o' , 'пП'=>'p'  , 'рР'=>'r'  , 'сС'=>'s', 'тТ'=>'t' ,
'уУ'=>'u' , 'фФ'=>'f'  , 'хХ'=>'kh' , 'цЦ'=>'c', 'чЧ'=>'ch',
'шШ'=>'sh', 'щЩ'=>'shh', 'ъЪ'=>''   , 'ыЫ'=>'y', 'ьЬ'=>''  ,
'эЭ'=>'eh', 'юЮ'=>'ju' , 'яЯ'=>'ja');
my$z=shift;
pop@{([\map do{$z=~s|[$_]|$hs{$_}|gi;},keys %hs])},$z;$z
}

вторник, 4 сентября 2007 г.

Удобная отладка в Перл.

Вот недавно за написанием одной из программ мне в голову стукнула идея, что было бы очень удобно иметь средство вывода значений переменных вместе с их именами. Есть проблема - есть решение: ссылка

Модуль Data::Dumper::Names предоставляет как раз данную возможность; вот пример использования:
#!/usr/bin/perl
use Data::Dumper::Names;
my$suxx="test";
my@arr=qw!val1 тест!;
print Dumper($suxx, \$suxx, \@arr);

В результате получим:
nrg@Dell:~/dev/perl_staff> perl data_dumper_names.pl
$suxx = 'test';
$suxx = \$suxx;
@arr = (
'val1',
'тест'
);


Не правда ли прелестная вещь? Для установки через Цпан используем команду: cpan Data::Dumper::Names