Обновить
1.5

Perl *

Высокоуровневый интерпретируемый динамический язык

Сначала показывать
Порог рейтинга
Уровень сложности

Асинхронность в DBD::Pg

Время на прочтение2 мин
Охват и читатели3K
Все мы привыкли работать с базой в стиле:
  1. выполнить запрос
  2. дождаться ответа
  3. продолжить выполнение


Но пока работает длинный запрос, мы в приложении можем выполнить что-то полезное. Не простаивать же процессорному времени.

Для PostgreSQL в DBD::Pg есть некоторое подобие асинхронности. И иногда оно таки нам помогает.
Читать дальше →

Интересная ошибка Perl-разработчика

Время на прочтение2 мин
Охват и читатели1.3K
Представим, что у вас есть код:
  1. chomp(my $input = <STDIN>);
  2. my $kinda_secret = get_data($input);
  3. if(defined $kinda_secret) {
  4.  print 'Your secret is: ', $kinda_secret
  5. }
  6. else {
  7.  print 'No soup for you'
  8. }
  9.  
  10. sub get_data {
  11.  my $input = shift;
  12.  open my $fh, '<', 'data.file' or return;
  13.  my $retval;
  14.  while(<$fh>) {
  15.   if(/^$input:(.+?)$/) {
  16.    $retval = $1;
  17.    last
  18.   }
  19.  }
  20.  close $fh;
  21.  
  22.  $retval
  23. }
* This source code was highlighted with Source Code Highlighter
.

Ничего экзотичного. Вариации такого кода могут встретиться где угодно. Смысл кода, надеюсь, ясен (я не имею в виду его практическую ценность).

Вы уже увидели ошибку? Если да, то дальше можно не читать.
Читать дальше →

Perl и GUI. Упаковка виджетов

Время на прочтение3 мин
Охват и читатели1.4K
Прежде чем мы рассмотрим основные элементы управления библиотеки Tk, необходимо научиться упаковывать виджеты на форме.

Существует несколько упаковщиков, это pack, place, grid. Каждый из них подходит под определенные задачи, но grid является наиболее эффективным.

grid это таблица, и все виджеты располагаются в ее ячейках. Позиция указывается через строку и столбец, соответственно row и column.

вызывать можно как напрямую через Tkx: Tkx::grid( $объект, ... )
так и через родителя(им может выступать любой виджет, обычно окно или фрейм)
$объект->g_grid( ... )

Одна таблица, может быть вложена в другую в зависимости от иерархии.
Читать дальше →

Mojolicious::Lite

Время на прочтение1 мин
Охват и читатели2.7K
Sebastian Riedel не перестает удивлять, в прошлую субботу он анонсировал Mojolicious::Lite. Это реально круто, такого я в перле еще не видел, действительно «быстрый старт»:

Читать дальше →

Perl и GUI. Работа с потоками

Время на прочтение3 мин
Охват и читатели4.5K
Я затрону весьма наболевшую тему, Perl + GUI + потоки.
Наболевшую, потому что попытка заставить работать ваше приложение с потоками может закончиться неудачей. Программа «виснет», «сегфолитится», Вы обратитесь к документации, увидете там, что библиотека не thread-safe. Потраченное время было коту под хвост?

Хинт: создать потоки до вызова Tkx::MainLoop, так как MainLoop() запускает свой цикл событий и блокирует выполнение кода. Было бы все так просто! Переписали Вы код с этим условием, а она все равно виснет…

Что же делать? Выход есть.
Читать дальше →

Модуль управления деревьями Nested Sets

Время на прочтение18 мин
Охват и читатели5K

Задача


Да уж, собрал ты катер, что бы кататься по водоемам и наслаждаться жизнью. Поехал на очередное озеро отдохнуть, а тебе говорят, что мол с собаками и катерами вход воспрещен, и вообще у нас озеро вечно замерзшее, вот вам коньки — наслаждайтесь. «Welcome to the Virtual Hosting lake».
Читать дальше →

Perl и GUI. Часть 1

Время на прочтение3 мин
Охват и читатели7.3K
В предыдущем посте мы разобрались с библиотеками для написания GUI на Perl. Поэтому можно приступить к работе.

Сегодня мы попробуем создать простое приложение (окно и главное меню).
Я буду использовать Tkx и ActivePerl.

Для начала, необходимо понять основные принципы.

Читать дальше →

Perl и GUI. Сравнение тулкитов

Время на прочтение2 мин
Охват и читатели7.6K
Несмотря на большое количество модулей в CPAN, дистрибутивов Perl (Strawberry Perl, ActivePerl, MinGW Perl) возникают некоторые неопределенности, одна из них — это выбор графического тулкита для построения GUI (графического интерфейса пользователя). Об этом и пойдет речь.

Лично я остановился на ActivePerl от компании ActiveState. Также для работы применяю Komodo IDE и Perl Dev Kit.

Итак, я выбрал четыре основных модуля для работы с GUI, обеспечивающие кроссплатформенность.
Читать дальше →

Вышел Parrot 1.4.0 «Mundo Cani»

Время на прочтение2 мин
Охват и читатели1.2K
Parrot LogoЗа все время чтения хабра видел лишь несколько упоминаний Parrot VM. Тем временем, проект активно развивается, и сегодня вышел релиз 1.4.0. Parrot — виртуальная машина, предназначенная для эффективной компиляции и исполнения байткода для динамических языков программирования. На данный момент существуют реализации нескольких языков для Parrot: Tcl, Javascript, Ruby, Lua, Scheme, PHP, Python, Perl 6, APL, а также транслятор байткода .NET.

Читать дальше →

Perl — Отправляем файлы на сервер HTTP запросом

Время на прочтение5 мин
Охват и читатели14K
На самом деле, ничего оригинального, документации достаточно, даже более чем, хотя последее вызывают очень сильную тоску. Поэтому, проще один раз практически показать, как и что делается, чем десять раз читать и наступать на грабли. Условие: Есть какие-то бинарные файлы, которые лежат локально, есть сервер, на которые мы должны эти файлы положить, на этом сервере есть скрипт (обработчик формы) который занимается делает upload файлов
Задача: Данные файлы требуется добавить через web интерфейс (обработчик формы) на сервер, как будто мы браузер и отправили данные через форму.
Читать дальше →

Moose(X). Продолжение

Время на прочтение6 мин
Охват и читатели2.7K
В продолжение топика Use Moose; Современное ООП в Perl, я хочу рассказать про некоторые интересные возможности, которые предоставляет Moose и его расширения.
Из упомянутого выше топика можно понять, что с Moose вам не придется тратить время на реализацию объектной модели. Но кроме автоматического создания аксесоров/мутаторов и конструктора, есть еще куча всяких полезностей и интересностей. А уж с помощью расширений, так вообще можно преобразить Perl до неузнаваемости (в хорошую, естественно, сторону).

Примеры кода я буду приводить из своего модуля, который я пробую переписать в стиле modern perl.
Читать дальше →

Ставим Perl на Apache, работающий под Windows.

Время на прочтение2 мин
Охват и читатели7.6K
// публикую по просьбе пользователя mikegav

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

  1. Считаю, что у Вас уже установлен Apache 2.2.11. Если не установлен, то можно поставить WAMP www.wampserver.com/en
  2. Скачиваем ActivePerl-5.8.9.825-MSWin32-x86-288577.msi Скачивать нужно именно эту версию, а не 5.10, потому что для версии 5.10 нет mod_perl в репозитарии.
  3. Ставим mod_perl из репозитария, для этого выполняем из командной строки: ppm install theoryx5.uwinnipeg.ca/ppms/mod_perl.ppd
  4. Во время установки будет всего один вопрос “Where should mod_perl.so be placed? [D:/Apache2/modules]” Следует указать путь до папки “modules” (У меня D:\wamp\bin\apache\Apache2.2.11\modules\)
  5. После установки mod_perl, настраиваем вручную Apache.
    1. Подключаем perl, для этого после последнего LoadModule добавляем:
      #Enable mod_perl
      LoadFile "C:/Perl/bin/perl58.dll"
      LoadModule perl_module modules/mod_perl.so
      PerlResponseHandler ModPerl::Registry
      PerlOptions +ParseHeaders

    2. Мне не нравиться официальная рекомендация создавать отдельный каталог для perl скриптов и на него вешать SetHandler perl-script, вешать же SetHandler на корневой каталог Web сервера то-же не комильфо т.к. это убьет работу php интерпретатора. Я предлагаю сделать как я, ассоциировать расширение pl с perl-script. Для этого достаточно добавить строчку: AddType perl-script .pl. И разрешить исполнение cgi в корневой директории. Для этого в внутрь узла <Directory «d:/wamp/www/»> добавить Options +ExecCGI
    3. Ну и на любителя, если уж совсем хотите, чтобы perl скрипты вели себя как php-шные привести DirectoryIndex к такому виду: DirectoryIndex index.pl index.php index.php3 index.html index.htm

Пара слов про UTF-8

Время на прочтение6 мин
Охват и читатели46K
Perl долгое время ничего не знал про кодировки. Строка была просто последовательностью байтов, каждый держал там все что хотел, и лишь изредка приходилось задумываться о том, какая же все-таки кодировка у этих данных. Времена изменились, появился UTF; поддержать его пришлось и перлистам. Как это обычно бывает, in a perl way. Я надеюсь, что эта статья сбережет немного здоровья тем, кто до сих пор пребывает в неведении относительно реализации UTF-8 в Perl.
Читать дальше →

Ближайшие события

Атрибуты: взгляд внутрь

Время на прочтение4 мин
Охват и читатели2.4K
Это продолжение статьи "Введение в атрибуты". Если Вы не знакомы с идеей атрибутов и их синтаксисом — советую начать с нее. Ну а в этой статье рассматривается, как устроены атрибуты изнутри, как с ними обращаться, и какие могут возникнуть проблемы.
Поехали?

Атрибуты: введение

Время на прочтение2 мин
Охват и читатели2.6K
Атрибуты появились в Perl довольно давно. Знаменательная для старожилов версия Perl 5.005 содержала довольно бесполезную прагму attrs. Прагма эта позволяла навесить на функцию пару встроенных атрибутов, для чего требовалось указать внутри этой функции use attrs с соответствующими параметрами. Правда, уже в марте 2000 года в Perl 5.6 эта прагма была объявлена deprecated. На замену ей пришел модуль attributes, а также расширенный синтаксис для объявления переменных/функций. Стало возможным создавать для них собственные метки и вводить для этих меток обработчики. По непонятным причинам, популярность атрибуты так и не получили. А жаль.
Ближе к сути

Корректное использование AUTOLOAD

Время на прочтение1 мин
Охват и читатели4.4K
Хотелось бы сразу предупредить: Это статья предназначена не для зубров, а описывает вполне обычный трюк с AUTOLOAD.

Введение



В Perl существует замечательная возможность отрабатывать вызовы к неопределённым методам.

Например, в случае
package Something;

our $AUTOLOAD;

sub AUTOLOAD
{
  return 'any data';
}

sub DESTROY
{
}

package  XTest;

my $o = new Something();

print $o->dry();


Результат будет равен 'any data'.
Читать дальше →

Мучаем Last.fm и СDDB.

Время на прочтение4 мин
Охват и читатели4.3K
Случилось так, что за долгую меломанскую жизнь у меня скопилось более 1000 дисков уже «архаичного» формата аудио CD. А что же делать в эпоху социальных сетей, в общем, и Last.fm в частности, с таким количеством дисков? Правильно, надо отправить всё на Last.fm и желательно скопом, не слушая их на компьютере (хотя такое количество это всего полтора месяца непрерывного штурма соседских ушей), а кроме того аудио CD на компьютере я не слушаю. Чтобы решить такую «непростую» задачу надо всего четыре вещи: великий и могучий язык PERL, Last.fm API, CDDB и быть немного программистом.
Или к радости, или к сожалению, у меня есть только 3/4 от необходимого, так как программистом я не являюсь и никоим образом профессия моя к компьютерам не относима (sic!). Ну что же, глаза болят, а руки делают; желание иметь красивую статистику и профиль пересиливают отсутствие необходимых навыков :).
Итак, по порядку...

Украинский воркшоп «Перл мова» — 2009

Время на прочтение1 мин
Охват и читатели521
Привет.
Спешу напомнить, что 7 марта, в Киеве пройдёт перловый воркшоп.
Это такая… миниконференция, а может быть и не мини.
В программе мероприятия доклады, и мастерклассы, а также беседы в кулуарах и кабаках с такими же как вы разработчиками, использующими перл. Особенно хочется отметить присутствие специально приглашённого гостя Джонатана Вортингтона, одного из разработчиков компилятора Perl 6 Rakudo.
Так же в программе серия блиц докладов. Так что если вам хочется о чём то расказать, или у вас есть инетесная разработка, или вы хотите поставить серьёзный вопрос, но 40 минут для вас слишком много, или вы неуверены в своих силах, то это лучший выход.

Участие в мероприятии бесплатное, атмосфера креативная и добрая.
Приглашаем.

Сразу хочу добавить, что в Москве такое тоже произойдёт этой весной, но чуть пожже.

Вызов пользовательской функции в Perl из переменной

Время на прочтение1 мин
Охват и читатели2.6K
Да, понадобилось мне сделать такой изврат. В PHP — это call_user_func().

Учитывая, что в Google я с довольно большим трудом нашёл реализацию (да и не там, где ожидал, а в вызовах), решил опубликовать сюда:

#!/usr/bin/perl -w
use strict;
if(exists $ARGV[0] && exists &{$ARGV[0]}){
    my $func_call = \&{$ARGV[0]};
    &$func_call();
}
sub test{
    print "123\n";
}


соответственно,

./test.pl test выведет 123
./test.pl aaa ничего не выведет

Возможно, кому-то пригодится)

Вклад авторов