Меня часто спрашивают, как я учил Perl — какие книги читал, какие сайты посещал и так далее. Многие считают, что Perl имеет сложный синтаксис, и потому не хотят или бояться его учить. В этом FAQ я хотел бы поделиться своим мнением относительно языка Perl.
0
Рейтинг
Perl *
Высокоуровневый интерпретируемый динамический язык
Сначала показывать
Порог рейтинга
Уровень сложности
PSGI — интерфейс между web-серверами и web-приложениями на perl
3 мин
5.2KНе так давно появилась спецификация интерфейса между web-серверами и приложениями/фреймворками на perl PSGI — Perl Web Server Gateway Interface Specification. PSGI добавляет слой абстракции, позволяющий не заботиться о конкретном способе подключения к web-серверу, и реализовать единственный интерфейс для спецификации. Запустить такое приложение можно на cерверах, поддерживающих PSGI — на данный момент это Plack (набор серверов и утилит), nginx (с патчем для поддержки PSGI и встроенным perl) и Apache с mod_psgi.
+13
Компиляция Perl под Windows
1 мин
21KПод Microsoft Windows существует несколько популярных дистрибутивов Perl.
Это Strawberry Perl и ActivePerl. Первый предназначен исключительно для Windows, второй собирается под различные платформы (полный список можно найти на официальном сайте). Важно учесть, что в ActivePerl, модули распространяются в уже готовом виде, и бывает так, что приходится ждать пока обновят репозитории.
В этом небольшом HowTo я расскажу, как подготовить рабочую среду Perl из сорцов.
Это Strawberry Perl и ActivePerl. Первый предназначен исключительно для Windows, второй собирается под различные платформы (полный список можно найти на официальном сайте). Важно учесть, что в ActivePerl, модули распространяются в уже готовом виде, и бывает так, что приходится ждать пока обновят репозитории.
В этом небольшом HowTo я расскажу, как подготовить рабочую среду Perl из сорцов.
+13
Конференция Saint Perl
1 мин
700Совсем скоро — 18 декабря в 10.00 в здании Мат-Меха СПб пройдёт конференция Saint Perl — первая питерская тематическая конференция, посвящённая Perl.
«Приглашаются разработчики, докладчики, участники и просто интересные люди, желающие участвовать в обмене знаниями на тему языка Perl.»
Сайт конференции: http://2009.yapcrussia.org/saintperl/ Там подробно написано о том, как проехать, пройти, расписание и прочее. Так как поиск по хабру ничего не дал, а событие совсем скоро, опубликовала эту совсем небольшую новость.
Кстати, 18 декабря для языка будет 22-м днём рождения.
«Приглашаются разработчики, докладчики, участники и просто интересные люди, желающие участвовать в обмене знаниями на тему языка Perl.»
Сайт конференции: http://2009.yapcrussia.org/saintperl/ Там подробно написано о том, как проехать, пройти, расписание и прочее. Так как поиск по хабру ничего не дал, а событие совсем скоро, опубликовала эту совсем небольшую новость.
Кстати, 18 декабря для языка будет 22-м днём рождения.
+5
Истории
Perl и GUI. Взаимодействие приложений
3 мин
1.7KИногда возникает необходимость сделать обмен данными между приложениями (например выполнить какую-либо команду в Internet Explorer, Excel).
Платформа Microsoft Windows предоставляет нам несколько механизмов, это и OLE, COM и… DDE.
DDE был введен в 1987 году, позже была сетевая реализация NetDDE, и используется до сих пор.
Работать с DDE очень просто, не требуется подключать с CPAN дополнительные модули, все есть в tkkit.
Рассмотрим на примере двух приложений приёмника и отправителя.
Описание и код под хабракатом.
Платформа Microsoft Windows предоставляет нам несколько механизмов, это и OLE, COM и… DDE.
DDE был введен в 1987 году, позже была сетевая реализация NetDDE, и используется до сих пор.
Работать с DDE очень просто, не требуется подключать с CPAN дополнительные модули, все есть в tkkit.
Рассмотрим на примере двух приложений приёмника и отправителя.
Описание и код под хабракатом.
+10
Флаеры в кино
3 мин
1.3KИзучить Перл я мечтал уже довольно давно, но все никак не удавалось. Но вот на днях я собрал всю свою решимость и сел за мануал. Естественно, нужна была задача требующая решения, и она нашлась. Есть замечательный журнал TimeOut, и на его сайте периодически раздают флаеры на бесплатные кинопоказы. Единственный минус — нельзя подписаться на эти раздачи, то есть по почте приглашение в кино нахаляву никто не пришлет. Это-то неудобство я и решил исправить.
+19
Perl и GUI. Виджеты
4 мин
3KЭта статья будет продолжением обзора виджетов графической библиотеки Tk (tkx).
Мы рассмотрим:
Label
Button
Entry
CheckButton
RadioButton
ComboBox
Frame
Мы рассмотрим:
Label
Button
Entry
CheckButton
RadioButton
ComboBox
Frame
+28
Однострочные программы на Perl
7 мин
39KВведение
Я собираюсь рассказать об однострочных программах на Perl. Если вы овладете однострочным Perl`ом, то можете сэкономить кучу времени (я экономлю).
Цель поста — показать как Perl можно использовать заместо find, grep, awk, sed. В конце поста будет написано зачем это надо.
+86
Применение наследования в шаблонах Mason
6 мин
2.2KMason — достаточно известный и распространенный фреймворк для разработки Perl-приложений. Несмотря на простой синтаксис, он обладает достаточно широкими возможностями и высокой производительностью; имеет встроенные средства для интеграции с mod_perl и memcached. Освоить работу с mason очень просто — система хорошо документирована. В то же время, есть ряд интересных тонкостей, до которых документацию дочитывают не все. Возможно, именно поэтому код, который мне доводилось видеть, до боли напоминал неудачную поделку на PHP, в которой для упрощения жизни разработчик не использовал ничего сложнее разбивки на инклюдники. Можно ли на масоне писать лучше? По-моему, да.
+11
Пример построения неблокирующего веб-приложения
7 мин
5.7KЗа последнее время видел пару хабратопиков (раз, два), в которых описывается использование неблокирующих сокетов и событийно-ориентированного программирования в вебе. Хочу поделиться своим опытом создания веб-приложения на этой технологии.
Недавно захотел создать свой сервис проверки номеров ICQ на невидимость. Алгоритм проверки старый и известный, но до сих пор работающий — отправка специально сформированного служебного сообщения и анализ ответа сервера. Необходимо было держать несколько постоянных подключений к серверу ICQ, а также иметь веб-интерфейс для запросов на проверку. Очевидное решение — создание демона, который создает несколько потоков для ICQ-соединений, и как-либо получает команды от веб-приложения, использующего несколько процессов-воркеров (или на preforked архитектуре) — для возможности обрабатывать http-запросы от нескольких клиентов. Но я решил освоить новую для себя технологию и сделать приложение, поддерживающее несколько соединений и отвечающее клиентам, используя всего лишь один поток.
Недавно захотел создать свой сервис проверки номеров ICQ на невидимость. Алгоритм проверки старый и известный, но до сих пор работающий — отправка специально сформированного служебного сообщения и анализ ответа сервера. Необходимо было держать несколько постоянных подключений к серверу ICQ, а также иметь веб-интерфейс для запросов на проверку. Очевидное решение — создание демона, который создает несколько потоков для ICQ-соединений, и как-либо получает команды от веб-приложения, использующего несколько процессов-воркеров (или на preforked архитектуре) — для возможности обрабатывать http-запросы от нескольких клиентов. Но я решил освоить новую для себя технологию и сделать приложение, поддерживающее несколько соединений и отвечающее клиентам, используя всего лишь один поток.
+34
Почти-web-сервер своими руками
7 мин
9.6KВ последнее время появилось несколько постов по привлечению внимания к определённым языкам программирования на примере написания некоего несложного «web-сервера». Раз уж пошла такая пьянка perl пока не затронули, то добавлю и свои пять копеек :)
Будем писать несложное серверное приложение, маскирующееся под http-сервер.
Будем писать несложное серверное приложение, маскирующееся под http-сервер.
+20
Как поменять кодировку id3 меток в mp3
1 мин
15KВсем доброго дня и пятничного настроения.
Хочу поделиться с вами замечательной программой которая спасла мне многие-многие человеко-часы и решила довольно сложную задачу за пару секунд.
Предыстория такова. Слил я как-то все песни Владимира Высоцкого, всего 32 альбома, но кодировка в них была cp1251. Так как я давно для себя решил, что вся информация у меня будет храниться только в Юникоде, cp1251 в такой большой коллекции меня это не устраивало.
Стал я искать, проги для перекодирования. Их и под Windows немного а для Linux-а я нашел только EasyTag. Но производительность моего труда, с использованием данной программы оставляла желать лучшего. На ручную перекодировку одного альбома, у меня уходило полчаса, а автоматизировать процесс у меня никак не получалось. Настройки были мне не совсем понятны и при неверном выборе все кодировки меток могли мгновенно превратиться в не читаемую и невосстановимую белиберду.
Хочу поделиться с вами замечательной программой которая спасла мне многие-многие человеко-часы и решила довольно сложную задачу за пару секунд.
Предыстория такова. Слил я как-то все песни Владимира Высоцкого, всего 32 альбома, но кодировка в них была cp1251. Так как я давно для себя решил, что вся информация у меня будет храниться только в Юникоде, cp1251 в такой большой коллекции меня это не устраивало.
Стал я искать, проги для перекодирования. Их и под Windows немного а для Linux-а я нашел только EasyTag. Но производительность моего труда, с использованием данной программы оставляла желать лучшего. На ручную перекодировку одного альбома, у меня уходило полчаса, а автоматизировать процесс у меня никак не получалось. Настройки были мне не совсем понятны и при неверном выборе все кодировки меток могли мгновенно превратиться в не читаемую и невосстановимую белиберду.
+26
Perl и GUI. Работа с меню
3 мин
3.1KОбзор виджетов Tk, я начну с рассмотрения главного меню c учетом особенностей различных ОС.
Для начала создадим заготовку для нашего приложения:
Все как обычно, File, Edit, Help. (меню каскадное). Новый объект создается с помощью метода new_menu(); (подобно контейнеру)
Добавление осуществляется через add_cascade(), где
-label — это заголовок меню.
-menu — виджет
-underline — индекс буквы подчеркивания. Необходимо для быстрой навигации с помощью кнопки Alt+буква (нумерация идет с 0)
смотрим, что получилось.
Толку от пустого меню нету, поэтому «набьем» его командами
Для начала создадим заготовку для нашего приложения:
#!/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)
смотрим, что получилось.
Толку от пустого меню нету, поэтому «набьем» его командами
# Меню 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(), '<
+17
Ближайшие события
8 октября – 4 декабря
Онлайн
Больше событий в календаре
Разработка
Другое
Больше событий в календаре
Разработка
Менеджмент
Больше событий в календаре
Разработка
Аналитика
Больше событий в календаре
Разработка
Маркетинг
Другое
Больше событий в календаре
Менеджмент
Другое
Больше событий в календаре
Разработка
Маркетинг
Другое
IPC::Open3. Решение проблемы с STDERR
2 мин
1.4KКогда мы пишем графическое приложение, бывает что требуется вызывать внешние программы и читать из STDOUT/STDERR.
С этим прекрасно справляется модуль IPC::Open3.
Однако, программу Вы написали, все работает, но Вы не хотите чтобы пользователь (или Вы) видели ненужное окно терминала.
Есть несколько вариантов его скрыть:
С этим прекрасно справляется модуль IPC::Open3.
Однако, программу Вы написали, все работает, но Вы не хотите чтобы пользователь (или Вы) видели ненужное окно терминала.
Есть несколько вариантов его скрыть:
+3
Асинхронность в DBD::Pg
2 мин
2.9KВсе мы привыкли работать с базой в стиле:
Но пока работает длинный запрос, мы в приложении можем выполнить что-то полезное. Не простаивать же процессорному времени.
Для PostgreSQL в DBD::Pg есть некоторое подобие асинхронности. И иногда оно таки нам помогает.
- выполнить запрос
- дождаться ответа
- продолжить выполнение
Но пока работает длинный запрос, мы в приложении можем выполнить что-то полезное. Не простаивать же процессорному времени.
Для PostgreSQL в DBD::Pg есть некоторое подобие асинхронности. И иногда оно таки нам помогает.
+18
Интересная ошибка Perl-разработчика
2 мин
1.3KПредставим, что у вас есть код:
Ничего экзотичного. Вариации такого кода могут встретиться где угодно. Смысл кода, надеюсь, ясен (я не имею в виду его практическую ценность).
Вы уже увидели ошибку? Если да, то дальше можно не читать.
- chomp(my $input = <STDIN>);
- my $kinda_secret = get_data($input);
- if(defined $kinda_secret) {
- print 'Your secret is: ', $kinda_secret
- }
- else {
- print 'No soup for you'
- }
-
- sub get_data {
- my $input = shift;
- open my $fh, '<', 'data.file' or return;
- my $retval;
- while(<$fh>) {
- if(/^$input:(.+?)$/) {
- $retval = $1;
- last
- }
- }
- close $fh;
-
- $retval
- }
* This source code was highlighted with Source Code Highlighter.
Ничего экзотичного. Вариации такого кода могут встретиться где угодно. Смысл кода, надеюсь, ясен (я не имею в виду его практическую ценность).
Вы уже увидели ошибку? Если да, то дальше можно не читать.
+19
Perl и GUI. Упаковка виджетов
3 мин
1.4KПрежде чем мы рассмотрим основные элементы управления библиотеки Tk, необходимо научиться упаковывать виджеты на форме.
Существует несколько упаковщиков, это pack, place, grid. Каждый из них подходит под определенные задачи, но grid является наиболее эффективным.
grid это таблица, и все виджеты располагаются в ее ячейках. Позиция указывается через строку и столбец, соответственно row и column.
вызывать можно как напрямую через
так и через родителя(им может выступать любой виджет, обычно окно или фрейм)
Одна таблица, может быть вложена в другую в зависимости от иерархии.
Существует несколько упаковщиков, это pack, place, grid. Каждый из них подходит под определенные задачи, но grid является наиболее эффективным.
grid это таблица, и все виджеты располагаются в ее ячейках. Позиция указывается через строку и столбец, соответственно row и column.
вызывать можно как напрямую через
Tkx: Tkx::grid( $объект, ... )
так и через родителя(им может выступать любой виджет, обычно окно или фрейм)
$объект->g_grid( ... )
Одна таблица, может быть вложена в другую в зависимости от иерархии.
+5
Mojolicious::Lite
1 мин
2.6KSebastian Riedel не перестает удивлять, в прошлую субботу он анонсировал Mojolicious::Lite. Это реально круто, такого я в перле еще не видел, действительно «быстрый старт»:
+5
Perl и GUI. Работа с потоками
3 мин
4.3KЯ затрону весьма наболевшую тему, Perl + GUI + потоки.
Наболевшую, потому что попытка заставить работать ваше приложение с потоками может закончиться неудачей. Программа «виснет», «сегфолитится», Вы обратитесь к документации, увидете там, что библиотека не thread-safe. Потраченное время было коту под хвост?
Хинт: создать потоки до вызова Tkx::MainLoop, так как MainLoop() запускает свой цикл событий и блокирует выполнение кода. Было бы все так просто! Переписали Вы код с этим условием, а она все равно виснет…
Что же делать? Выход есть.
Наболевшую, потому что попытка заставить работать ваше приложение с потоками может закончиться неудачей. Программа «виснет», «сегфолитится», Вы обратитесь к документации, увидете там, что библиотека не thread-safe. Потраченное время было коту под хвост?
Хинт: создать потоки до вызова Tkx::MainLoop, так как MainLoop() запускает свой цикл событий и блокирует выполнение кода. Было бы все так просто! Переписали Вы код с этим условием, а она все равно виснет…
Что же делать? Выход есть.
+14
Модуль управления деревьями Nested Sets
18 мин
4.7KЗадача
Да уж, собрал ты катер, что бы кататься по водоемам и наслаждаться жизнью. Поехал на очередное озеро отдохнуть, а тебе говорят, что мол с собаками и катерами вход воспрещен, и вообще у нас озеро вечно замерзшее, вот вам коньки — наслаждайтесь. «Welcome to the Virtual Hosting lake».
+3