Как стать автором
Обновить
0

Perl *

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

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

Конференция Saint Perl

Время на прочтение 1 мин
Количество просмотров 687
Совсем скоро — 18 декабря в 10.00 в здании Мат-Меха СПб пройдёт конференция Saint Perl — первая питерская тематическая конференция, посвящённая Perl.

«Приглашаются разработчики, докладчики, участники и просто интересные люди, желающие участвовать в обмене знаниями на тему языка Perl.»

Сайт конференции: http://2009.yapcrussia.org/saintperl/ Там подробно написано о том, как проехать, пройти, расписание и прочее. Так как поиск по хабру ничего не дал, а событие совсем скоро, опубликовала эту совсем небольшую новость.

Кстати, 18 декабря для языка будет 22-м днём рождения.
Всего голосов 5: ↑5 и ↓0 +5
Комментарии 4

Perl и GUI. Взаимодействие приложений

Время на прочтение 3 мин
Количество просмотров 1.6K
Иногда возникает необходимость сделать обмен данными между приложениями (например выполнить какую-либо команду в Internet Explorer, Excel).
Платформа Microsoft Windows предоставляет нам несколько механизмов, это и OLE, COM и… DDE.

DDE был введен в 1987 году, позже была сетевая реализация NetDDE, и используется до сих пор.
Работать с DDE очень просто, не требуется подключать с CPAN дополнительные модули, все есть в tkkit.

Рассмотрим на примере двух приложений приёмника и отправителя.

image

Описание и код под хабракатом.

Читать дальше →
Всего голосов 20: ↑15 и ↓5 +10
Комментарии 17

Флаеры в кино

Время на прочтение 3 мин
Количество просмотров 1.3K
Изучить Перл я мечтал уже довольно давно, но все никак не удавалось. Но вот на днях я собрал всю свою решимость и сел за мануал. Естественно, нужна была задача требующая решения, и она нашлась. Есть замечательный журнал TimeOut, и на его сайте периодически раздают флаеры на бесплатные кинопоказы. Единственный минус — нельзя подписаться на эти раздачи, то есть по почте приглашение в кино нахаляву никто не пришлет. Это-то неудобство я и решил исправить.
Читать дальше
Всего голосов 41: ↑30 и ↓11 +19
Комментарии 52

Perl и GUI. Виджеты

Время на прочтение 4 мин
Количество просмотров 2.9K
Эта статья будет продолжением обзора виджетов графической библиотеки Tk (tkx).

image

Мы рассмотрим:
Label
Button
Entry
CheckButton
RadioButton
ComboBox
Frame

Читать дальше →
Всего голосов 40: ↑34 и ↓6 +28
Комментарии 10

Истории

Однострочные программы на Perl

Время на прочтение 7 мин
Количество просмотров 38K

Введение


Я собираюсь рассказать об однострочных программах на Perl. Если вы овладете однострочным Perl`ом, то можете сэкономить кучу времени (я экономлю).

Цель поста — показать как Perl можно использовать заместо find, grep, awk, sed. В конце поста будет написано зачем это надо.
Читать дальше →
Всего голосов 104: ↑95 и ↓9 +86
Комментарии 45

Применение наследования в шаблонах Mason

Время на прочтение 6 мин
Количество просмотров 2.1K
Mason — достаточно известный и распространенный фреймворк для разработки Perl-приложений. Несмотря на простой синтаксис, он обладает достаточно широкими возможностями и высокой производительностью; имеет встроенные средства для интеграции с mod_perl и memcached. Освоить работу с mason очень просто — система хорошо документирована. В то же время, есть ряд интересных тонкостей, до которых документацию дочитывают не все. Возможно, именно поэтому код, который мне доводилось видеть, до боли напоминал неудачную поделку на PHP, в которой для упрощения жизни разработчик не использовал ничего сложнее разбивки на инклюдники. Можно ли на масоне писать лучше? По-моему, да.
Попробуем?
Всего голосов 17: ↑14 и ↓3 +11
Комментарии 9

Пример построения неблокирующего веб-приложения

Время на прочтение 7 мин
Количество просмотров 5.6K
За последнее время видел пару хабратопиков (раз, два), в которых описывается использование неблокирующих сокетов и событийно-ориентированного программирования в вебе. Хочу поделиться своим опытом создания веб-приложения на этой технологии.

Недавно захотел создать свой сервис проверки номеров ICQ на невидимость. Алгоритм проверки старый и известный, но до сих пор работающий — отправка специально сформированного служебного сообщения и анализ ответа сервера. Необходимо было держать несколько постоянных подключений к серверу ICQ, а также иметь веб-интерфейс для запросов на проверку. Очевидное решение — создание демона, который создает несколько потоков для ICQ-соединений, и как-либо получает команды от веб-приложения, использующего несколько процессов-воркеров (или на preforked архитектуре) — для возможности обрабатывать http-запросы от нескольких клиентов. Но я решил освоить новую для себя технологию и сделать приложение, поддерживающее несколько соединений и отвечающее клиентам, используя всего лишь один поток.
Читать дальше →
Всего голосов 40: ↑37 и ↓3 +34
Комментарии 12

Почти-web-сервер своими руками

Время на прочтение 7 мин
Количество просмотров 9.4K
В последнее время появилось несколько постов по привлечению внимания к определённым языкам программирования на примере написания некоего несложного «web-сервера». Раз уж пошла такая пьянка perl пока не затронули, то добавлю и свои пять копеек :)
Будем писать несложное серверное приложение, маскирующееся под http-сервер.
Читать дальше →
Всего голосов 38: ↑29 и ↓9 +20
Комментарии 46

Как поменять кодировку id3 меток в mp3

Время на прочтение 1 мин
Количество просмотров 15K
Всем доброго дня и пятничного настроения.
Хочу поделиться с вами замечательной программой которая спасла мне многие-многие человеко-часы и решила довольно сложную задачу за пару секунд.

Предыстория такова. Слил я как-то все песни Владимира Высоцкого, всего 32 альбома, но кодировка в них была cp1251. Так как я давно для себя решил, что вся информация у меня будет храниться только в Юникоде, cp1251 в такой большой коллекции меня это не устраивало.

Стал я искать, проги для перекодирования. Их и под Windows немного а для Linux-а я нашел только EasyTag. Но производительность моего труда, с использованием данной программы оставляла желать лучшего. На ручную перекодировку одного альбома, у меня уходило полчаса, а автоматизировать процесс у меня никак не получалось. Настройки были мне не совсем понятны и при неверном выборе все кодировки меток могли мгновенно превратиться в не читаемую и невосстановимую белиберду.
Читать дальше →
Всего голосов 40: ↑33 и ↓7 +26
Комментарии 43

Perl и GUI. Работа с меню

Время на прочтение 3 мин
Количество просмотров 3K
Обзор виджетов Tk, я начну с рассмотрения главного меню c учетом особенностей различных ОС.

Для начала создадим заготовку для нашего приложения:

#!/usr/bin/perl -w
use strict;
use Tkx;

our $PROGNAME = 'app';
our $VERSION = '0.1';
<habracut>

my $windowingsystem = Tkx::tk_windowingsystem();
my $IS_AQUA = ($windowingsystem eq 'aqua');

# Учитывая, что имена некоторых кнопок могут различаться, 
# в OSX это Control, в Win/X11 это Ctrl, добавим еще несколько переменных
# (пригодится для хоткеев)
my $plat_acc_ctrl = ($^O eq 'darwin') ? ('Control-') : ('Ctrl+');
my $plat_evt_ctrl = ($^O eq 'darwin') ? ('Control-') : ('Control-');

# Главное окно.
my $mw = Tkx::widget->new('.');

Tkx::tk( appname => $PROGNAME );
Tkx::wm_minsize( $mw => qw(320 200) );

# новое меню прикрепляется с помощью параметра -menu
$mw->configure(
  -menu => make_menu( $mw ),
);


Tkx::MainLoop;
1;

sub on_quit {
  Tkx::tk___messageBox( -message => 'Goodbye ;]' );
  exit;
}

sub show_about {
  Tkx::tk___messageBox( -message => "$PROGNAME $VERSION" );
}

sub make_menu {
 my $mw = shift || return;

 # По умолчанию, все меню выглядит подобно в GIMP, их можно открепить
 # Поэтому, выключим данную опцию
 Tkx::option_add('*Menu.tearOff', 0)

 # ... продолжение ниже

  return $m; 
}


Все как обычно, File, Edit, Help. (меню каскадное). Новый объект создается с помощью метода new_menu(); (подобно контейнеру)

my $m = $mw->new_menu(); # Верхний уровень
my $fm = $m->new_menu(); # File
my $em = $m->new_menu(); # Edit

# А теперь, добавим наши пункты в верхний уровень
$m->add_cascade( -label => 'File', -menu => $fm, -underline => 0 );
$m->add_cascade( -label => 'Edit', -menu => $em, -underline => 0 );



Добавление осуществляется через add_cascade(), где
-label — это заголовок меню.
-menu — виджет
-underline — индекс буквы подчеркивания. Необходимо для быстрой навигации с помощью кнопки Alt+буква (нумерация идет с 0)

смотрим, что получилось.
image

Толку от пустого меню нету, поэтому «набьем» его командами

# Меню File
$fm->add_command(
  -label => 'Do something',
  -underline => 0,
  -command => sub { },
);

# разделитель
$fm->add_separator();

$fm->add_command(
  -label => 'Quit',
  -underline => 0,
  -accelerator => "${plat_acc_ctrl}Q",
  -command => [\&on_quit],
);

Tkx::bind( all => "<${plat_evt_ctrl}q>" => [\&on_quit] );

# Меню Edit
$em->add_command(
  -label => 'Cut',
  -underline => 2,
  -accelerator => "${plat_acc_ctrl}X",
  -command => sub { Tkx::event_generate(Tkx::focus(), '<
Читать дальше →
Всего голосов 31: ↑24 и ↓7 +17
Комментарии 22

IPC::Open3. Решение проблемы с STDERR

Время на прочтение 2 мин
Количество просмотров 1.3K
Когда мы пишем графическое приложение, бывает что требуется вызывать внешние программы и читать из STDOUT/STDERR.
С этим прекрасно справляется модуль IPC::Open3.

Однако, программу Вы написали, все работает, но Вы не хотите чтобы пользователь (или Вы) видели ненужное окно терминала.

Есть несколько вариантов его скрыть:
Читать дальше →
Всего голосов 5: ↑4 и ↓1 +3
Комментарии 6

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

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


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

Для PostgreSQL в DBD::Pg есть некоторое подобие асинхронности. И иногда оно таки нам помогает.
Читать дальше →
Всего голосов 26: ↑22 и ↓4 +18
Комментарии 24

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

Время на прочтение 2 мин
Количество просмотров 1.2K
Представим, что у вас есть код:
  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
.

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

Вы уже увидели ошибку? Если да, то дальше можно не читать.
Читать дальше →
Всего голосов 21: ↑20 и ↓1 +19
Комментарии 12

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

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн

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

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

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

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

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

Одна таблица, может быть вложена в другую в зависимости от иерархии.
Читать дальше →
Всего голосов 7: ↑6 и ↓1 +5
Комментарии 0

Mojolicious::Lite

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

Читать дальше →
Всего голосов 11: ↑8 и ↓3 +5
Комментарии 7

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

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

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

Что же делать? Выход есть.
Читать дальше →
Всего голосов 18: ↑16 и ↓2 +14
Комментарии 10

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

Время на прочтение 18 мин
Количество просмотров 4.6K

Задача


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

Perl и GUI. Часть 1

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

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

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

Читать дальше →
Всего голосов 22: ↑18 и ↓4 +14
Комментарии 8

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

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

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

Итак, я выбрал четыре основных модуля для работы с GUI, обеспечивающие кроссплатформенность.
Читать дальше →
Всего голосов 27: ↑24 и ↓3 +21
Комментарии 46

Вышел Parrot 1.4.0 «Mundo Cani»

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

Читать дальше →
Всего голосов 47: ↑42 и ↓5 +37
Комментарии 29

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