Рубрика «perl» - 9

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

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

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

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

Читать полностью »

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

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

Что же в этом интересного?
Читать полностью »

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

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

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

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

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

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

В 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

Читать полностью »

Директории

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

В 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 марта - 1

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

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

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

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

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

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

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

Читать полностью »

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

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


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js