Есть набор переменных, $arg_* и массив $args, но туда попадают только переменные из строки запроса (прежде всего это будут GET запросы, но и у POST могут быть). А что делать, если надо обработать POST запросы? Зачем? Например, есть некий софт, который запрашивает файл через post, надо получить имя и отдать его с диска. Только ради этого писать обёртку на любом языке, которая требует ресурсов, обслуживания, обновлений, проверки что оно всегда работает итд? А если эта прослойка не успела ещё запуститься или просто упала, а файл уже запросили? Всего-то дел, получить имя из запроса...
Увы, штатного метода нет, но благодаря модулям со сторонними языками это реализуемо, правда пока найдено только 2 метода.
Показаны сообщения с ярлыком perl. Показать все сообщения
Показаны сообщения с ярлыком perl. Показать все сообщения
вторник, 4 августа 2015 г.
понедельник, 8 июля 2013 г.
FreeBSD: обновляем perl с 5.10 до 5.16
В связи с тем, что 5.10 выпилен, лучше обновлять сразу на максимально свежую версию. И есть там ряд нюансов.
пятница, 29 марта 2013 г.
perl+cpan
Если есть возможность, всегда надо ставить штатной системой пакетов. Но иногда всё-таки нужно ставить из цпана, делается это так
perl -MCPAN -e 'install DBD::mysql'
Могут быть ошибки разного рода, например
dbdimp.c:3215 error: 'imp_sth_t' has no member named 'warning_count'
В данном случае видно, что это ошибка сборки dbdimp.c, то есть проблема зависимостей библиотек. В линуксе обычно требуется сначала поставить mysql-devel + mysqlclient. В общем, тут нет автоматического решения зависимостей, и это ещё один минус такой ручной установки. Ну и сложнее потом сопровождать такую систему, поэтому если нужен 1-2 модуля, можно их просто скачать прямо в проект, доставив зависимости через систему.
Линки
http://twiki.org/cgi-bin/view/TWiki/HowToInstallCpanModules
http://www.dark.ca/2010/04/08/cpan-rpms-in-rhel-centos/
http://stackoverflow.com/questions/1440320/installation-of-perl-packages-is-failing-on-centos-5-64-bit
perl -MCPAN -e 'install DBD::mysql'
Могут быть ошибки разного рода, например
dbdimp.c:3215 error: 'imp_sth_t' has no member named 'warning_count'
В данном случае видно, что это ошибка сборки dbdimp.c, то есть проблема зависимостей библиотек. В линуксе обычно требуется сначала поставить mysql-devel + mysqlclient. В общем, тут нет автоматического решения зависимостей, и это ещё один минус такой ручной установки. Ну и сложнее потом сопровождать такую систему, поэтому если нужен 1-2 модуля, можно их просто скачать прямо в проект, доставив зависимости через систему.
Линки
http://twiki.org/cgi-bin/view/TWiki/HowToInstallCpanModules
http://www.dark.ca/2010/04/08/cpan-rpms-in-rhel-centos/
http://stackoverflow.com/questions/1440320/installation-of-perl-packages-is-failing-on-centos-5-64-bit
воскресенье, 3 февраля 2013 г.
FreeBSD: Use of assignment to $[ is deprecated at /usr/local/sbin/apxs line 86.
После обновления перла при сборке разных пакетов может показывать ошибку
Use of assignment to $[ is deprecated at /usr/local/sbin/apxs line 86.
У меня наблюдалось при переходе с перл 5.8 на 5.14
Как можно догадаться из текста, надо обновить (переустановить) apr и за компанию apache.
Use of assignment to $[ is deprecated at /usr/local/sbin/apxs line 86.
У меня наблюдалось при переходе с перл 5.8 на 5.14
Как можно догадаться из текста, надо обновить (переустановить) apr и за компанию apache.
понедельник, 10 декабря 2012 г.
CentOS 5 и perl 5.10+
Дело в том, что штатно версия в системе 5.8.8.
Если надо свежее:
1) Подключить допрепу, например
https://packages.endpoint.com/rhel/5/os/
wget https://packages.endpoint.com/rhel/5/os/`uname -i`/endpoint-repo-1.0-2.i386.rpm
rpm -i endpoint*
yum install local-perl и далее perl-* заменяем на local-perl-*
(тут версия 5.10)
2) использовать perlbrew
The "Modern" way of setting up a version of Perl different from the system Perl is by using
perlbrew - this way you can maintain a Perl version on a per-user basis without messing too much with the system installed perl; this way system installed stuff that uses Perl still works without problems.
http://serverfault.com/questions/269018/perl-5-10-on-centos-5
yum install perlbrew
perlbrew init
(выполняем, что сказали)
смотрим список того, что нам вообще доступно
perlbrew available
Installed /root/perl5/perlbrew/build/perl-5.12.5 as perl-5.12.5 successfully. Run the following command to switch to it.
perlbrew switch perl-5.12.5
Какие версии доступны для переключения
perlbrew list
3) собрать свои пакеты и поставить их.
Полно док типа
http://administraher.blogspot.ru/2010/12/upgrade-perl-588-to-5122-perl.html
но проблема в make install clean без контроля, что куда и как ставится. Поэтому _необходимо_ собрать пакеты и уже ставить их.
И да, будет конфликт версий, поэтому ставить надо будет в нештатное место, что опять же при тупом make install clean приведет к проблемам.
И вообще, если perlbrew делает всё нужное включая отслеживание, сборку и установку, зачем извращаться?...
Если надо свежее:
1) Подключить допрепу, например
https://packages.endpoint.com/rhel/5/os/
wget https://packages.endpoint.com/rhel/5/os/`uname -i`/endpoint-repo-1.0-2.i386.rpm
rpm -i endpoint*
yum install local-perl и далее perl-* заменяем на local-perl-*
(тут версия 5.10)
2) использовать perlbrew
The "Modern" way of setting up a version of Perl different from the system Perl is by using
perlbrew - this way you can maintain a Perl version on a per-user basis without messing too much with the system installed perl; this way system installed stuff that uses Perl still works without problems.
http://serverfault.com/questions/269018/perl-5-10-on-centos-5
yum install perlbrew
perlbrew init
(выполняем, что сказали)
смотрим список того, что нам вообще доступно
perlbrew available
Ставим.
perlbrew install perl-5.12.5
но тут можно получить "упс":
Можно получить
Installing /root/perl5/perlbrew/build/perl-5.12.5 into ~/perl5/perlbrew/perls/perl-5.12.5
This could take a while. You can run the following command on another shell to track the status:
tail -f ~/perl5/perlbrew/build.log
Installing /root/perl5/perlbrew/build/perl-5.12.5 failed. See /root/perl5/perlbrew/build.log to see why.
А в логе:
...
./trygcc: line 25: gcc: command not found
./checkcc: line 10: cc: command not found
Uh-oh, the C compiler 'cc' doesn't seem to be working.
То есть нету gcc.
Доставим:
yum install -y gcc
Как я понимаю, компилятор обязателен, тогда непонятно, почему он не указан в зависимостях.
Повторяем install, получаем
Installed /root/perl5/perlbrew/build/perl-5.12.5 as perl-5.12.5 successfully. Run the following command to switch to it.
perlbrew switch perl-5.12.5
Какие версии доступны для переключения
perlbrew list
Больше информации в perlbrew help
Также к нему рекомендуют ставить cpanm
плюс
"в общем, если сильно беспокоит вопрос актуального состояние всего и вся, то можно поставить App::cpanoutdated и с нужной периодичностью запускать «cpan-outdated | cpanm» сначала в тестовом окружении, а затем в продакшене"
Также к нему рекомендуют ставить cpanm
плюс
"в общем, если сильно беспокоит вопрос актуального состояние всего и вся, то можно поставить App::cpanoutdated и с нужной периодичностью запускать «cpan-outdated | cpanm» сначала в тестовом окружении, а затем в продакшене"
3) собрать свои пакеты и поставить их.
Полно док типа
http://administraher.blogspot.ru/2010/12/upgrade-perl-588-to-5122-perl.html
но проблема в make install clean без контроля, что куда и как ставится. Поэтому _необходимо_ собрать пакеты и уже ставить их.
И да, будет конфликт версий, поэтому ставить надо будет в нештатное место, что опять же при тупом make install clean приведет к проблемам.
И вообще, если perlbrew делает всё нужное включая отслеживание, сборку и установку, зачем извращаться?...
понедельник, 29 октября 2012 г.
p5-File-Listing-6.04 conflicts with installed package(s): p5-libwww-5.837
При попытке обновления p5-libwww-5 на p5-libwww-6 может вылезти такая штука:
...
===> p5-libwww-6.04 depends on package: p5-Encode-Locale>=0 - found
===> p5-libwww-6.04 depends on package: p5-File-Listing>=6 - not found
===> Verifying install for p5-File-Listing>=6 in /usr/ports/sysutils/p5-File-Listing
===> p5-File-Listing-6.04 conflicts with installed package(s):
p5-libwww-5.837
They install files into the same place.
You may want to stop build with Ctrl + C.
===> License ART10 GPLv1 accepted by the user
===> p5-File-Listing-6.04 conflicts with installed package(s):
p5-libwww-5.837
They will not build together.
Please remove them first with pkg_delete(1).
среда, 23 ноября 2011 г.
perl: Формирование названия пакетов
Отдельно идёт LWP::* - оно в пакете libwww
FreeBSD:
p5-{}, :: заменяется на -, регистр не меняется
Примеры:
DBD::mysql p5-DBD-mysql
LWP::* p5-libwww
CentOS:
perl-{}, :: заменяется на -, регистр не меняется
Примеры:
DBI perl-DBI
DBD::mysql perl-DBD-MySQL
LWP::* perl-libwww-perl
Debian:
lib{}-perl, :: заменяется на -, регистр меняется на строчные
Примеры:
DateTime libdatetime-perl
DBI libdbi-perl
DBD::mysql libdbd-mysql-perl
LWP::* libwww-perl
FreeBSD:
p5-{}, :: заменяется на -, регистр не меняется
Примеры:
DBD::mysql p5-DBD-mysql
LWP::* p5-libwww
CentOS:
perl-{}, :: заменяется на -, регистр не меняется
Примеры:
DBI perl-DBI
DBD::mysql perl-DBD-MySQL
LWP::* perl-libwww-perl
Debian:
lib{}-perl, :: заменяется на -, регистр меняется на строчные
Примеры:
DateTime libdatetime-perl
DBI libdbi-perl
DBD::mysql libdbd-mysql-perl
LWP::* libwww-perl
четверг, 27 октября 2011 г.
среда, 14 сентября 2011 г.
perl-mysql, centos и юникод
Дело в том, что в CentOS 5.6 штатно идёт perl-DBD-MySQL 3.0007, который некорректно работает с юникодом - страницы показывает, будто то ли указана cp1251, то ли получили двойное преобразование. Это проблема старой версии. Лечится установкой 4 версии. Для этого подключаем rpmforge-extras (ставится с rpmforge), там версия 4.014, с ней отображается нормально.
ЗЫ Некоторые говорят, что типа фря отстой, линукс форева.. Но при этом в центоси много софта многолетней давности, во фре в разы такого меньше. Тот же перл -- штатно тут 5.8, во фре штатно 5.8, 5.10, 5.12.
Более того, просмотрел все основные репы - там _только_ 5.8.8
ЗЫ Некоторые говорят, что типа фря отстой, линукс форева.. Но при этом в центоси много софта многолетней давности, во фре в разы такого меньше. Тот же перл -- штатно тут 5.8, во фре штатно 5.8, 5.10, 5.12.
Более того, просмотрел все основные репы - там _только_ 5.8.8
вторник, 30 августа 2011 г.
Обновление пакетами: что делать, если сломали перл
Решили поставить/обновить например glib? Если обновлять пакетами (например portinstall -PP devel/glib20), можно увидеть такое:
---> Checking for the latest package of 'devel/glib20'
---> Fetching the package(s) for 'glib-2.28.8' (devel/glib20)
---> Fetching glib-2.28.8
/var/tmp/portupgradetCmzSZ97/glib-2.28.8.tbz 100% of 3095 kB 724 kBps
---> Downloaded as glib-2.28.8.tbz
---> Identifying the package /var/tmp/portupgradetCmzSZ97/glib-2.28.8.tbz
---> Saved as /usr/ports/packages/All/glib-2.28.8.tbz
---> Found a package of 'devel/glib20': /usr/ports/packages/All/glib-2.28.8.tbz (glib-2.28.8)
---> Located a package version 2.28.8 (/usr/ports/packages/All/glib-2.28.8.tbz)
---> Installing 'glib-2.28.8' from a package
---> Installing lang/perl5.12 as dependency required by glib-2.28.8
---> Checking for the latest package of 'lang/perl5.12'
---> Fetching the package(s) for 'perl-5.12.4_1' (lang/perl5.12)
---> Fetching perl-5.12.4_1
/var/tmp/portupgradeyshhUlQo/perl-5.12.4_1.tbz100% of 14 MB 986 kBps 00m00s
---> Downloaded as perl-5.12.4_1.tbz
---> Identifying the package /var/tmp/portupgradeyshhUlQo/perl-5.12.4_1.tbz
---> Saved as /usr/ports/packages/All/perl-5.12.4_1.tbz
---> Found a package of 'lang/perl5.12': /usr/ports/packages/All/perl-5.12.4_1.tbz (perl-5.12.4_1)
---> Located a package version 5.12.4_1 (/usr/ports/packages/All/perl-5.12.4_1.tbz)
---> Installing 'perl-5.12.4_1' from a package
---> Installing the new version via the package
pkg_add: package 'perl-5.12.4_1' conflicts with perl-5.10.1_3
pkg_add: -f specified; proceeding anyway
Removing stale symlinks from /usr/bin...
Removing /usr/bin/perl
Removing /usr/bin/perl5
Done.
Creating various symlinks in /usr/bin...
Symlinking /usr/local/bin/perl5.12.4 to /usr/bin/perl
Symlinking /usr/local/bin/perl5.12.4 to /usr/bin/perl5
Done.
Cleaning up /etc/make.conf... Done.
Spamming /etc/make.conf... Done.
Cleaning up /etc/manpath.config... Done.
Spamming /etc/manpath.config... Done.
Первое - НЕ ПАНИКОВАТЬ! Не пытаться срочно переустановить старый перл и так далее. Он на месте и полностью рабочий, и чинится за минуту.
1) Узнать старую версию перла
pkg_info |grep perl-5
Теперь для каждого смотрим информацию о зависимостях (Required by:)
pkg_info perl-5.10.1_3
У которого их много - это наша старая версия.
2) восстановить симлинки
cd /usr/bin/
unlink perl*
ln -s /usr/local/bin/perl5.10.1 perl
ln -s /usr/local/bin/perl5.10.1 perl5
На самом деле, надо ещё поправить: в /usr/local/bin перезаписывается perl и perl5, причём perl5 симлинк, а вот perl - файл.
rm /usr/local/bin/perl
unlink /usr/local/bin/perl5
cp /usr/local/bin/perl5.10.1 /usr/local/bin/perl
ln -s /usr/local/bin/perl5.10.1 /usr/local/bin/perl5
vi /etc/make.conf
исправляем версию перла..
vi /etc/manpath.config
тоже самое
Всё, перл вернули назад.
---> Checking for the latest package of 'devel/glib20'
---> Fetching the package(s) for 'glib-2.28.8' (devel/glib20)
---> Fetching glib-2.28.8
/var/tmp/portupgradetCmzSZ97/glib-2.28.8.tbz 100% of 3095 kB 724 kBps
---> Downloaded as glib-2.28.8.tbz
---> Identifying the package /var/tmp/portupgradetCmzSZ97/glib-2.28.8.tbz
---> Saved as /usr/ports/packages/All/glib-2.28.8.tbz
---> Found a package of 'devel/glib20': /usr/ports/packages/All/glib-2.28.8.tbz (glib-2.28.8)
---> Located a package version 2.28.8 (/usr/ports/packages/All/glib-2.28.8.tbz)
---> Installing 'glib-2.28.8' from a package
---> Installing lang/perl5.12 as dependency required by glib-2.28.8
---> Checking for the latest package of 'lang/perl5.12'
---> Fetching the package(s) for 'perl-5.12.4_1' (lang/perl5.12)
---> Fetching perl-5.12.4_1
/var/tmp/portupgradeyshhUlQo/perl-5.12.4_1.tbz100% of 14 MB 986 kBps 00m00s
---> Downloaded as perl-5.12.4_1.tbz
---> Identifying the package /var/tmp/portupgradeyshhUlQo/perl-5.12.4_1.tbz
---> Saved as /usr/ports/packages/All/perl-5.12.4_1.tbz
---> Found a package of 'lang/perl5.12': /usr/ports/packages/All/perl-5.12.4_1.tbz (perl-5.12.4_1)
---> Located a package version 5.12.4_1 (/usr/ports/packages/All/perl-5.12.4_1.tbz)
---> Installing 'perl-5.12.4_1' from a package
---> Installing the new version via the package
pkg_add: package 'perl-5.12.4_1' conflicts with perl-5.10.1_3
pkg_add: -f specified; proceeding anyway
Removing stale symlinks from /usr/bin...
Removing /usr/bin/perl
Removing /usr/bin/perl5
Done.
Creating various symlinks in /usr/bin...
Symlinking /usr/local/bin/perl5.12.4 to /usr/bin/perl
Symlinking /usr/local/bin/perl5.12.4 to /usr/bin/perl5
Done.
Cleaning up /etc/make.conf... Done.
Spamming /etc/make.conf... Done.
Cleaning up /etc/manpath.config... Done.
Spamming /etc/manpath.config... Done.
Первое - НЕ ПАНИКОВАТЬ! Не пытаться срочно переустановить старый перл и так далее. Он на месте и полностью рабочий, и чинится за минуту.
1) Узнать старую версию перла
pkg_info |grep perl-5
Теперь для каждого смотрим информацию о зависимостях (Required by:)
pkg_info perl-5.10.1_3
У которого их много - это наша старая версия.
2) восстановить симлинки
cd /usr/bin/
unlink perl*
ln -s /usr/local/bin/perl5.10.1 perl
ln -s /usr/local/bin/perl5.10.1 perl5
На самом деле, надо ещё поправить: в /usr/local/bin перезаписывается perl и perl5, причём perl5 симлинк, а вот perl - файл.
rm /usr/local/bin/perl
unlink /usr/local/bin/perl5
cp /usr/local/bin/perl5.10.1 /usr/local/bin/perl
ln -s /usr/local/bin/perl5.10.1 /usr/local/bin/perl5
vi /etc/make.conf
исправляем версию перла..
vi /etc/manpath.config
тоже самое
Всё, перл вернули назад.
среда, 30 марта 2011 г.
Ставим Net::OpenID
Оказалось, штатно нет OpenID библиотек для перла. Нашлось оно в RPMForge
"RPMforge является результатом сотрудничества Dag-а,Dries-а, и других создателей пакетов. Он обеспечивает более 4000 пакетов для CentOS, в том числе MPlayer, XMMS-mp3 и другие популярные медиа программы." отсюда
Ставим RPMForge
rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt
Для CentOS5
rpm -ivh http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.`uname -i`.rpm
Почему-то так не прошло, ругалось на непонятную ошибку. Делаем тогда примерно по офдоке:
wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.`uname -i`.rpm; rpm -K rpmforge-release-0.5.2-2.el5.rf.*.rpm && rpm -i rpmforge-release-0.5.1-1.el5.rf.*.rpm
Для CentOS6 заменяем el5 на el6
После этого появляется пакет
perl-Net-OpenID-Server.noarch
Впрочем, надо ещё Net::OpenID::Consumer, который в rpmforge есть только под 6 центось.
Вообще, он есть тут: http://packages.sw.be/perl-Net-OpenID-Consumer/
Но при попытке скачать получаем not found...
"RPMforge является результатом сотрудничества Dag-а,Dries-а, и других создателей пакетов. Он обеспечивает более 4000 пакетов для CentOS, в том числе MPlayer, XMMS-mp3 и другие популярные медиа программы." отсюда
Ставим RPMForge
rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt
Для CentOS5
rpm -ivh http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.`uname -i`.rpm
Почему-то так не прошло, ругалось на непонятную ошибку. Делаем тогда примерно по офдоке:
wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.`uname -i`.rpm; rpm -K rpmforge-release-0.5.2-2.el5.rf.*.rpm && rpm -i rpmforge-release-0.5.1-1.el5.rf.*.rpm
Для CentOS6 заменяем el5 на el6
После этого появляется пакет
perl-Net-OpenID-Server.noarch
Впрочем, надо ещё Net::OpenID::Consumer, который в rpmforge есть только под 6 центось.
Вообще, он есть тут: http://packages.sw.be/perl-Net-OpenID-Consumer/
Но при попытке скачать получаем not found...
четверг, 27 января 2011 г.
О языках для web
http://nuclight.livejournal.com/107170.html
К вопросу об ублюдочности PHP
http://stanislaw.ru/rus/research/perl.htm
Критический анализ языка Perl
http://jacobian.org/writing/hate-python/
Five things I hate about Python
В вики
http://ru.wikipedia.org/wiki/Python#.D0.9D.D0.B5.D0.B4.D0.BE.D1.81.D1.82.D0.B0.D1.82.D0.BA.D0.B8
http://juixe.com/techknow/index.php/2007/09/21/java-ruby-and-even-python-sucks/
Java, Ruby, and even Python Sucks
Реально о руби и яве. О питоне - "кто все эти люди?"
>> бы не сказал, что динамическая типизая - недостаток. иногда это даже преимущество. =)
>Я сказал "_тотальная_ динамическая типизация". Плохо именно то, что от нее невозможно отказаться, нет никакой статической проверки, и тривиальные ошибки живут до момента, когда на них натыкается исполнение.
По словам очевидцев хорошее покрытие юнит-тестами спасает.
http://www.linux.org.ru/forum/talks/2446678
Еще про питон. Поскольку он интерпретируемый, это означает низкую скорость работы. Как и пхп. Но если для пхп есть всякие АРС да eaccelerator, то с питоном сильно хуже -- нет НИЧЕГО.
Есть встроенный компилер в байт-код, но это совсем не панацея.
"Глобальная блокировка интерпретатора (GIL)
GIL (Global Interpreter Lock) — проблема, присущая CPython, Stackless и PyPy, но отсутствующая в Jython и IronPython."
IronPython это с# с синтаксисом питона, там нет ни одного модуля питона, тока нетовские
jpython это компилятор питона-в-яву
не проще сразу на c# или яве писать?
А про GIL - для веба это не особо мешает - "клиенту по скрипту".
К вопросу об ублюдочности PHP
http://stanislaw.ru/rus/research/perl.htm
Критический анализ языка Perl
http://jacobian.org/writing/hate-python/
Five things I hate about Python
В вики
http://ru.wikipedia.org/wiki/Python#.D0.9D.D0.B5.D0.B4.D0.BE.D1.81.D1.82.D0.B0.D1.82.D0.BA.D0.B8
http://juixe.com/techknow/index.php/2007/09/21/java-ruby-and-even-python-sucks/
Java, Ruby, and even Python Sucks
Реально о руби и яве. О питоне - "кто все эти люди?"
>> бы не сказал, что динамическая типизая - недостаток. иногда это даже преимущество. =)
>Я сказал "_тотальная_ динамическая типизация". Плохо именно то, что от нее невозможно отказаться, нет никакой статической проверки, и тривиальные ошибки живут до момента, когда на них натыкается исполнение.
По словам очевидцев хорошее покрытие юнит-тестами спасает.
http://www.linux.org.ru/forum/talks/2446678
Еще про питон. Поскольку он интерпретируемый, это означает низкую скорость работы. Как и пхп. Но если для пхп есть всякие АРС да eaccelerator, то с питоном сильно хуже -- нет НИЧЕГО.
Есть встроенный компилер в байт-код, но это совсем не панацея.
"Глобальная блокировка интерпретатора (GIL)
GIL (Global Interpreter Lock) — проблема, присущая CPython, Stackless и PyPy, но отсутствующая в Jython и IronPython."
IronPython это с# с синтаксисом питона, там нет ни одного модуля питона, тока нетовские
jpython это компилятор питона-в-яву
не проще сразу на c# или яве писать?
А про GIL - для веба это не особо мешает - "клиенту по скрипту".
Подписаться на:
Сообщения (Atom)