Как стать автором
Поиск
Написать публикацию
Обновить
0.52

Perl *

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

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

Скармливающие операторы в Perl 6

Время на прочтение1 мин
Количество просмотров5.4K
Программисты Perl 5 сталкивались с такой структурой в коде:

    my @new = sort { ... } map { ... } grep { ... } @original;


Здесь данные идут справа налево, от массива @original, который скармливают в grep, который, в свою очередь, скармливает данные в map, а тот в sort, и в конце всё это присваивается массиву @new. Каждый из них принимает список в качестве аргумента.
Читать дальше →

Perl 6: Разные названия для разных вещей

Время на прочтение2 мин
Количество просмотров5.8K
Новички в Perl 5 жалуются, что в языке нет инструмента для реверса строк. Функция reverse есть, но она почему-то не работает:

    $ perl -E "say reverse 'привет'"
    привет


Набрав опыта, они находят решение. Функция работает в двух режимах. В списковом контексте она реверсирует списки, а в скалярном – строки:

    $ perl -E "say scalar reverse 'привет'"
    тевирп

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

Лексические переменные в Perl 6

Время на прочтение2 мин
Количество просмотров4.2K
Одна из проблем программирования – борьба с возрастающей сложностью программ при возрастании их объёма. Исторически она решается путём изолирования отдельных частей программ, взаимодействие которых друг с другом ограничено. Такой подход действует на всех уровнях программирования – «разделение концепций», «делай что-то одно и делай это хорошо», BCNF, монады, процедуры, классы, роли, модули. Все они поощряют ограничение частей программы, чтобы не играть против комбинаторики. Простейшим примером логического разделения является лексическая переменная.

{
    my $var;
    # $var доступна тут
}
# $var а тут недоступна


Что же в этом интересного?
Читать дальше →

Метаоператоры X и Z в Perl 6

Время на прочтение2 мин
Количество просмотров6K
Одна из новых идей Perl 6 – метаоператор. Это оператор, который можно скомбинировать с обычным оператором, изменив его поведение. Таких метаоператоров есть несколько штук, но в этой статье мы рассмотрим только X и Z.

Оператор X вы могли видеть в роли инфиксного комбинирования. Он комбинирует списки, по элементу из каждого, во всех возможных комбинациях:

> say ((1, 2) X ('a', 'b')).perl
((1, "a"), (1, "b"), (2, "a"), (2, "b"))


Однако, запись infix: - это короткая запись метаоператора X, примененного к оператору конкатенации infix:<,> . И действительно, можно написать:

> say ((1, 2) X, (10, 11)).perl
((1, 10), (1, 11), (2, 10), (2, 11))


Что произойдёт, если мы применим Х к другому инфиксному оператору? Например, к infix:<+>
Читать дальше →

Последовательности в Perl 6 / Rakudo

Время на прочтение3 мин
Количество просмотров7.7K
В Perl 6 введён новый оператор… для задания последовательностей. Вот как это работает:

my @even-numbers  := 0, 2 ... *;    # арифметическая последовательность
my @odd-numbers   := 1, 3 ... *;
my @powers-of-two := 1, 2, 4 ... *; # геометрическая последовательность

Пример использования:

> my @powers-of-two := 1, 2, 4 ... *; 1;
1
> @powers-of-two[^10]
1 2 4 8 16 32 64 128 256 512

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

Операции с файлами в Perl 6

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

Директории


Вместо opendir и его друзей, в Perl 6 есть одна функция dir, которая возвращает список файлов из директории (по умолчанию, из текущей). Вместо тысячи слов:
Читать дальше →

Взаимодействие с командной строкой perl 6 из функции MAIN

Время на прочтение2 мин
Количество просмотров4.8K
В Unix-среде множество скриптов получают аргументы из командной строки. В Perl 6 обрабатывать их очень просто:

    $ cat add.pl

    sub MAIN($x, $y) {
        say $x + $y
    }

    $ perl6 add.pl 3 4
    7
    $ perl6 add.pl too many arguments
    Usage:
    add.pl x y


Просто создав функцию MAIN и задав ей сигнатуру из параметров, вы автоматически получаете парсер командной строки, который передаёт их в аргументы функции $x и $y, и сообщение о правильном вызове скрипта.
Читать дальше →

Приглашаем на Moscow.pm 5 марта

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


5 марта мы приглашаем всех на очередную встречу Perl Mongers. Вот уже в течение восьми лет на такие встречи собираются Perl-программисты, которые обмениваются опытом со всеми единомышленниками. Программа предстоящего мероприятия посвящена исключительно Perl 6. Он настолько отличается от предыдущих версий, что рассматривается уже как самостоятельный язык программирования. Более того, многие специалисты считают, что Perl 6 станет настоящей вехой в развитии программирования. История его разработки началась в 2000 году, когда Ларри Уолл начал работу над спецификациями. Несмотря на то, что Perl 6 ещё не вышел официально, все желающие уже могут найти в сети совместимые с ним компиляторы и виртуальные машины. Под катом вас ждут описания докладов и материалы с прошлой встречи.
Читать дальше →

OpenCage — самый мощный инструмент для геокодирования

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


Большинство людей не задумываются о геокодировании, когда дают своему смартфону запрос в виде адреса, GPS-координат, широты и долготы, или координат what3words. Разработчики в свою очередь должны понимать всю критическую важность геокодера. Каждый из предложенных геокодеров имеет свои плюсы и минусы, которые нужно учитывать при выборе. Некоторые геокодеры могут иметь неприемлемые ограничения, стоимость, или быть недоступными для коммерческих целей. Некоторые сервисы не поддерживают кэширование, и практически все они имеют 24-часовые лимиты. Универсального варианта не существовало до появления OpenCage.
Читать дальше →

Авторинг Perl модулей

Время на прочтение19 мин
Количество просмотров6.4K
При разработке перл-модулей приходится делать много работы, которая практически не связана с задачами и кодом модуля — начиная от создания десятка типовых файлов/каталогов и заканчивая выполнением десятка одинаковых операций необходимых для выпуска новой версии.

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

Кроме того, многие из нас пишут на перле очень много лет, и последний раз читали perlnewmod когда изучали перл. В результате, когда создаются новые модули это нередко делается в стиле 15-ти летней давности, причём система сборки выбирается практически случайным образом — либо древний, но знакомый и точно умеющий что угодно EUMM, либо одна из других (не потому, что нужна именно она, а просто в надежде что она окажется проще и удобнее EUMM, не создав при этом новых проблем… которые она всё-таки со временем создаёт).

Далее кратко описаны имеющиеся на начало 2015 года средства, которые могут облегчить процесс разработки перл-модулей, сделать ваши модули более современными, и упростить другим разработчикам доработку ваших модулей. Я постарался перечислить их основные плюсы и минусы, но т.к. сам пользовался не всеми то буду дополнять/исправлять этот список в соответствии с вашими комментариями.

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

Приглашаем на Moscow.pm 5 февраля

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


Мы снова приглашаем всех единомышленников на очередную встречу Perl-программистов, Moscow.pm. Эта традиция поддерживается уже почти 8 лет. За это время мы сменили немало мест и форматов встреч, остановившись на гостеприимном и комфортном офисе Mail.Ru Group. Наши встречи — это не «клуб для своих», мы открыты как для ветеранов Moscow.pm, так и для новичков. Мы собираемся для того, чтобы обменяться опытом и знаниями, а заодно пообщаться с теми, кто разделяет наши интересы. Например, был случай, когда выступление, на которое отводилось 40 минут, переросло в трёхчасовую дискуссию, в которой участвовали все присутствующие.
Читать дальше →

Perl 6 и Rakudo: заметки от 2009 года

Время на прочтение45 мин
Количество просмотров6K
Серия статей о Perl 6 и Rakudo – одном из компиляторов, поддерживающих спецификацию Perl6. Эта статья собрана из заметок от 2009 года.

Устанавливаем Rakudo


В данный момент существует несколько неполных реализаций Perl 6. Самая полная из них – это компилятор Rakudo (скачать).

Пользователи git могут создать свою копию при помощи следующих команд:
$ git clone git://github.com/rakudo/rakudo.git
$ cd rakudo
$ perl Configure.pl --gen-parrot --gen-moar --gen-nqp --backends=parrot,jvm,moar
$ make
$ make install


Как вариант, можно собрать его из исходников, скачав их с github.com/rakudo/rakudo/tree/nom

Для Windows есть готовый установщик бинарников. Версии установщика и исходный код доступны по ссылке
Читать дальше →

Введение в разработку web-приложений на PSGI/Plack. Часть 4. Асинхронность

Время на прочтение8 мин
Количество просмотров3.9K
С разрешения автора и главного редактора журнала PragmaticPerl.com я публикую эту статью.
Оригинал статьи можно прочитать здесь.

Продолжение цикла статей посвященных разработке PSGI/Plack. Разбираемся с асинхронностью.
В предыдущий статьях мы рассмотрели основные аспекты разработки под PSGI/Plack, которых, в принципе, достаточно для разработки приложений практически любой сложности.

Мы разобрались, что такое PSGI, разобрались как устроен Plack, затем мы разобрались, как устроены основные компоненты Plack (Plack::Builder, Plack::Request, Plack::Middleware). Затем мы подробно рассмотрели Starman, который является хорошим PSGI-сервером, готовым для использования в production.
Читать дальше →

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

Введение в разработку web-приложений на PSGI/Plack. Часть 3. Starman

Время на прочтение10 мин
Количество просмотров4.8K
Продолжение цикла статей о PSGI/Plack. Рассмотрен более подробно preforking PSGI-сервер Starman.

С разрешения автора статьи и главного редактора журнала PragmaticPerl.com. Оригинал статьи расположен здесь

Starman?


Автор данного сервера (Tatsuhiko Miyagawa) говорит про него следующее:

«Название Starman взято из из песни Star H. A. Otoko японской рок-группы Unicorn (Да, Unicorn). У David Bowie тоже есть одноименная песня, Starman — имя персонажа культовой японской игры Earthbound, название музыкальной темы из Super Mario Brothers.

Я устал от именования Perl-модулей наподобие HTTP::Server::PSGI::How::Its::Written::With::What::Module, а в результате люди называют это HSPHIWWWM в IRC. Это плохо произносится и создает проблемы новичкам. Да, может быть я упорот. Время покажет.»

С названием разобрались. Теперь будем разбираться с самим сервером.
Читать дальше →

Введение в разработку web-приложений на PSGI/Plack. Часть 2

Время на прочтение10 мин
Количество просмотров3.2K
С разрешения автора и главного редактора журнала PragmaticPerl.com я продолжаю публикацию цикла статей.
Оригинальная статья тут.
Продолжение статьи о PSGI/Plack. Рассмотрены более подробно Plack::Builder, а также Plack::Middleware.

В прошлой статье мы рассмотрели спецификацию PSGI, как она появилась, почему ей стоит пользоваться. Рассмотрели Plack — реализацию PSGI, основные его компоненты и написали простейшее API, которое выполняло поставленные перед ним задачи, вскользь рассмотрели основные PSGI сервера.

Во второй части статьи мы рассмотрим следующие моменты:

  • Plack::Builder — мощный маршрутизатор и не только.
  • Plack::Middleware — расширяем наши возможности при помощи «прослоек».

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

Введение в разработку web-приложений на PSGI/Plack

Время на прочтение10 мин
Количество просмотров13K
Автор: Дмитрий Шаматрин.
С разрешения автора оригинальных статей цикла я публикую цикл на Хабре.
Оригинальная статья на сайте журнала pragmaticperl.com

PSGI/Plack — современный способ написания web-приложений на Perl. Практически каждый фреймворк так или иначе поддерживает или использует эту технологию. В статье представлено краткое введение, которое поможет быстро сориентироваться и двигаться дальше.


Мы живем в такое время, когда технологии и подходы в области web-разработки меняются очень быстро. Сначала был CGI, потом, когда его стало недостаточно, появился FastCGI. FastCGI решал главную проблему CGI. В CGI при каждом обращении было необходимо перезапускать серверную программу, обмен данными происходил при помощи STDIN и STDOUT. В FastCGI взаимодействие с сервером происходит через TCP/IP или Unix Domain Socket. Теперь у нас есть PSGI.

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

Как я получил медаль за код

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

В 2005 мой отряд Нацгвардии отправили в Ирак в рамках операции «Освобождение Ирака». Моей армейской специальностью была 92А, что означает специалист по логистике и запасам. Мои задачи состояла в том, чтобы заказывать запчасти для механиков, забирать их, возвращать старые, разбираться с опасными материалами, отправлять и принимать транспортные средства и обслуживать лицензии. И много чего ещё. В общем, в то время вся система крутилась на ULLS-G (Unit Level Logistics System – Ground, система логистики уровня отряда – наземная), которую потом уже сменила SAMS-E (Standard Army Maintenance System – Enhanced, расширенная стандартная система обслуживания армии), которая – так получилось – использовала в качестве бэкенда Oracle. По сравнению с SAMS-E, система ULLS-G выглядела как динозавр. Я много её использовал за 4 года, проведённые на службе. И это было ужасно. ULLS-G работала под MS-DOS (угу), и большинство компьютеров, которые я использовал, работали под MS-DOS (это был 2000 год). Когда мы прибыли на место дислокации, большинство компьютеров уже работали под WinXP/2K, поэтому можно было запускать ULLS-G в режиме совместимости с MS-DOS.
Читать дальше →

Простое решение для использования ЭЦП

Время на прочтение3 мин
Количество просмотров15K
imageНесколько лет назад мы начали проект «Открытые голосования», призванный создать систему для удобного проведения надежных и проверяемых голосований. К сожалению, дело ограничилось только теоретическими разработками, а в плане конкретных реализаций мы так и не продвинулись вперед. Не так давно я начал размышлять — почему так? Я сам разработчик. В команде тоже есть несколько разработчиков. Так что-же нам мешает? И пришел к выводу, что главная помеха — слишком большие первоначальные планы. Поэтому я решил начать с малого — с инструмента для простого использования электронной подписи обычными людьми. Причем, не только для нашего проекта, а для любого сайта, который сочтет это необходимым.

На данный момент это решение готово и я хочу поделиться им с общественностью. Исходные коды распространяются под открытой лицензией (ссылки в конце статьи).
Читать дальше →

День рождения Perl и лучшие решения Golf от Moscow.pm

Время на прочтение2 мин
Количество просмотров5.3K
Сегодня исполняется 27 лет со «дня рождения» одного из самых популярных на сегодня языков программирования — Perl. На нём создано несметное множество приложений и интернет-ресурсов, в том числе и имеющие многомиллионные аудитории, и соответствующие финансовые обороты. За примерами далеко ходить не придётся: Amazon, Yahoo!, Slashdot. Последние 20 лет он входит в десятку наиболее используемых языков, несмотря на слухи о своей кончине. Однако многомиллионная армия Perl-программистов, ежегодно выдающая на-гора множество продуктов, убедительно опровергает инсинуации верблюдоненавистников. Как говорится, собака лает — караван идёт. С момента своего появления в 1987 году, Perl взрастил уже два поколения программистов, и нет никаких причин отказываться от Жемчужного Корабля Пустыни ещё лет 30 как минимум. Так что мы с удовольствием поздравляем всех Perl-программистов с днём рождения их «родного» языка, Ларри Уоллу желаем долголетия календарного и творческого, чтобы ему хватило задора на создание ещё пары версий Perl.

Также ко дню рождения этого замечательного языка мы приурочили публикацию решений победителей в небольшом конкурсе программистов Golf, объявленном 3 октября в рамках митапа Moscow.pm.
Читать дальше →

6-й санкт-петербургский Perl-воркшоп и хакатон Saint Perl 2014

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

В декабре Perl празднует свой 27-й день рождения. А мы традиционно проводим приуроченный к этой славной дате очередной, шестой уже по счёту, Saint Perl. В этом году он состоится 20-21 декабря.
Читать дальше →

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