Разное

Перл язык: Perl — особенный язык программирования

Содержание

Perl. 27 лет спустя / Хабр

                              Обычный программист знает о Perl только то, что язык мертв, 
                              а код на нем нечитаем. Но программист на Perl часто не знает даже этого.

                              В каждой начинающей рок-группе должен быть Perl-программист, 
                              который бы демонстрацией своего кривого нечитаемого кода со сцены взывал
                              к низменным инстинктам толпы, разогревая ее.

                              Дань стереотипам.

    Вопреки стереотипам Perl все еще существует. Он живет где-то на периферии сознания тех, кто не пишет на нем. Он вызывает у них сильное непонимание, когда они встречают тех, кто на нем пишет. Культура Perl настолько размазана по времени, настолько проникнута стабильностью языка, что человеку постороннему достаточно тяжело понять, что из себя представляет Perl сегодня. И как с ним нужно бороться.

    Несметное множество статей на просторах интернета описывают Perl тех времен, когда небо было зеленым, трава голубой, а Ельцин в пьяном угаре радовал страну зажигательными танцами перед телекамерами, задавая ритм рейверам, что танцевали на той голубой траве и под тем зеленым небом.

И код из тех статей все еще компилируется. В результате у большинства программистов представление об этом языке представлено информацией 10-15… и даже 20 летней давности. Не следуют упускать из виду инерционность мышления тех, кто писал те статьи.

    Поэтому сегодня я попытаюсь пролить свет на то, что же происходит с языком на его начинающемся 28 году жизни. Ведь сегодня у Perl день рождения — ему 27 лет. 20 лет из которых существует его пятая версия. Заходите, будет весело.

Он еще используется?


    Да, он еще используется. Согласно данным webtech, Perl по распространенности все еще занимает почетное шестое место среди языков на веб-серверах, почему-то проигрывая ColdFusion, но зато выигрывая у Python. Тут главное разыграть карту хорошего маркетолога и умолчать о том, что общая доля Perl всего 0.5%.

    А что вообще создается и работает на Perl? Множество программного обеспечения, и простого, и сложного, и в том числе. используемого в веб. Perl в конце концов язык довольно широкого назначения и на нем можно встретить все — начиная от десктопных программ и серверов в телекомах, и заканчивая опостылевшими веб-сайтами. На перле написан Buzzfeed, сайт Комсомольской Правды, значительная часть кода сайта самого крупного регистратора доменных имен в СНГ Reg.ru, операторы отдела холодных звонков европейского отдела Vodafone выбирают очередную жертву навязчивой рекламы при помощи программы написанной на Perl… конечно же стоит упомянуть еще и DuckDuckGo, как известный многим сервис. К сожалению всего не упомянуть, столь много было создано на Perl, и веб — это лишь одна из областей его применения. Свободная лицензия Perl привела к тому, что он часто попадает в прошивки маршрутизаторов, и бог знает еще в какие коммерческие продукты. Трудно сказать насколько сильны позиции Perl в биоинформатике, учитывая сильную экспансию питона в эту область в течение последнего десятилетия, но он определенно активно используется и там.

    Perl — это также огромное количество клея между инструментами, написанных на разных языках, нет, просто чудовищное количество этого клея. Это на нем так часто пишутся скрипты для импорта новых данных в старые программы на компилируемых языках, кода которых уже не найти. Для них же создаются скрипты-обертки и вообще графические интерфейсы, которые в свое время предусмотрены не были. В 2011 мне попадалась вакансия перловика для поддержки системы сборки крупного Java-проекта. Что может говорить нам как о полезности Perl, так и о том, что экосистема Java настолько переусложнена, что иногда проще держать в штате одного чернокнижника с Perl, чем двух специалистов по Maven…

    Это на Perl часто пишутся скрипты для автоматизации, когда терпеть sh уже нет мочи, или же powershell кажется сомнительным вариантом. Количество однострочников, которые каждый день пишут на Perl системные администраторы всего мира, компенсируя несовершенство применяемых ими инструментов, просто не поддается исчислению. Несомненно, Perl вносит свою важную лепту в развитие такой отрасли как дорвеестроение, являясь важным инструментом черных сеошников. Считайте, что это была спаленая тема.

    Глядя на вакансии, связанные с веб-разработкой, и особенно те, что появляются на фриланс-сайтах, может показаться, будто на Perl пишутся одни лишь грабберы с парсерами. Несколько более полное представление о том, что и кем пишется на Perl в сфере веб-разработки, можно получить тут и тут, и немного тут. Но никак не на фриланс-бирже.

    Многие мелкие проекты пишутся на Perl в основном энтузиастами. Если бы им во время творческой горячки подсунули ноду — поверьте, они бы написали проект и на ноде. Так что такие проекты можно в расчет не принимать. А средние и крупные проекты существуют( и даже создаются!) на Perl по нескольким причинам, и энтузиасты тут ни при чем:

  • так исторически сложилось. Года до 2005 альтернативы у Perl не было, особенно в нише, когда PHP уже не хватало, а Java была уже перебором.
  • при определенной сложности веб-проект разрастается до таких размеров, что выходит за рамки простого запроса-ответа. Появляется сложный запутанный бэкенд, где могут быть разные схемы кэширования, прегенерации контента, интеграции с системными инструментами. И на бэкенде появляется разные демоны, которые все это делают. А при всей демонизации PHP программистами на других языках, демоны на нем писать можно не все и далеко не всем.
    Подобная причина объясняет почему при гораздо более лучших веб-фреймворках некоторые проекты таки пишутся на Perl и Python.
  • у вас есть тонны бизнес логики, корни которой уходят в шальные 90-е. Вы выдираете куски кода из старой программы на Tk, лепите их REST-серверу, и перлокод получает второе рождение. Прелесть такого подхода в том, что, ввиду высокой стабильности языка, изменения в коде обычно настолько минимальны, что вам самому может показаться, что Perl уже умер.
  • подвид предыдущего пункта — Perl слишком хороший язык для прототипирования, не только за счет самого языка, но и за счет кучи модулей в CPAN. Поэтому с определенного момента прототип написанный на нем может тяжело вздохнуть и со скрипом полезть в серверную стойку ближайшего датацентра.
  • заказчик потратил половину бюджета проекта на валидол после того услышал, сколько за указанный проект возьмут джависты. Не знаю почему, но у зарубежных заказчиков какое-то непонятное благоговение перед этим языком, и они часто готовы рассматривать его как альтернативу Java.
    Не с точки зрения функционала, в котором они по понятным причинам не разбираются, а с точки зрения репутации.
  • в конце концов Perl полноценный язык программирования, в который постоянно привносится все лучшее из других языков, и в котором есть все необходимое для реализации почти любых насущных задач.

Реанимация


    Perl долго терял свои позиции в области веб-разработки, не в последнюю очередь под давлением PHP. Ниша была немалой, но проигрыш языку, который намеренно создавался для веб-разрботки(во всяком случае той, какой она была в те дни), был довольно логичным. В конце концов Perl создавался несколько для другого. Но, несмотря на это в языке накапливались проблемы — нестандартное ООП все так же отпугивало многих, фреймворки для веб-разработки объективно проигрывали конкурентам в других языках, IDE сравнимого уровня просто не было(да и сейчас в принципе нет), стоимость программистов на Perl часто была выше, чем PHP-шников при сравнимой сложности проектов.
Тогда я сам, признаться, верил, что Perl не смог адаптироваться и будет со временем вытеснен отовсюду, и вернется на свое историческое место инструмента для системного администрирования.

    Такая ситуация была примерно до 2008 года, хотя это и моя субъективная оценка. Затем пошел хайп на Python. Данный язык мог полностью заменить Perl в нише биоинформатики, сложных веб-систем, системного программирования для юниксов(для меня кстати всегда было загадкой, почему под термином «системное программирование» в мире Windows понимается сношения с ядром и написание драйверов, а в мире юникс под этим обычно подразумеваются всякие сервисные скрипты). И с той мощной поддержкой и энтузиазмом возникшими вокруг питона, будь на его месте Cobol, и попадись он столь же вовремя под руку Google — результат был бы тот же. Также эта отмашка от гугла дала добро на использование скриптовых языков всем фанатам языков компилируемых, считавших доселе, что трогать скрипты выше их достоинства(по другим источникам — разумения).

И тут выяснилось, что Python решает важную проблему из Computer Science, которая формулируется как «Even your Mom handles strings better than your compiled language». Важность этой проблемы тяжело переоценить, а потому не стоит обвинять в излишнем восторге тех, кто открыл для себя Python, и пытался всячески его навязать другим.

    Но по иронии именно Python и дал Perl шанс на развитие. Кроме Django в питоне не было full-stack фреймворков, а Django настолько хорошо подходил для создания новостных сайтов, что скоро новостных сайтов, написанных не нем, стало больше, чем значимых новостей происходящих в мире ежедневно. Тут-то и выяснилось, что далеко не все сайты должны быть новостными и написаны с использованием Django. Сказано — сделано. Появился тренд на микрофреймворки вроде Flask, Pyrmaid, Bottle.py( да простят мне питонщики столь вольную трактовку термина «микрофреймворк»). Возможно дело тут было так же в том, что росла популярность REST сервисов, а питон тут и вовсе не при чем, но микрофреймворки пошли в оборот.

    В Perl помимо Catalyst появились фреймворки второй волны: Mojolicious, Dancer и Jifty. По фулстэковости они все еще не дотягивали до полновесных PHP-шных Zend или CodeIgniter, но на фоне питоновских микрофреймворков смотрелись вполне пристойно. А главное это был показатель того, что сообщество таки реагирует на вызовы современности.

    При этом часть сообщества активно металась между Perl, Ruby и Python, таская фичи оттуда. И не только фичи, а вообще стилистику и хорошие практики. В тот период особенно четко обозначился раскол Perl-сообщества на 2 группы — собственно тех, кто хочет вытянуть Perl из этого болота, и тех, кто привык писать в лучших традиция Perl 5( Perl 5.0 вышел в октябре 1994 ). И последних даже нельзя упрекнуть — среди них достаточно много системных администраторов, для которых Perl был идеальным в том виде, в каком он существовал в 1994. Такое расслоение частенько видно на конференциях, где вслед за докладом о том как кто-то написал на Perl удобный скрипт, который отсылает ему на SMS новые лоты с eBay, идет доклад о проблемах сложной инфраструктуры с использованием Corona, очередей сообщений, собственного CPAN-репозитория и прочих страшных вещей.

    Но в целом ситуация улучшается, и Perl уже преодолел ту точку, когда был возможен окончательный срыв в стагнацию. Сообщество таки признает свои проблемы и видны пути их решения. Конечно, ресурсов не хватает — в прошлогоднем докладе на одном из YAPC проскакивала информация о том, что весь С-шный код интерпретатора понимают буквально пара человек, а еще 15 могут разбираться в своих подсистемах. Не надо драматизировать эти цифры — они занимаются этим практически бесплатно, а много ли желающих копаться в старом С-коде, а особенно в кишках интерпретатора целого здорового языка, когда одно из ключевых требований — не ломать совместимость?

    Конечно, в Perl не будет такой хорошей IDE как для PHP или Python, потому что нет такой большой коммерческой поддержки с одной стороны, и нет той простоты синтаксиса, которая бы легко позволила создавать парсеры Perl, которые необходимы в каждой сколько-то серьезной IDE. Да и даже будь они, нагонять придется долго — фактически IDEA и Microsoft являются монополистами на рынке IDE, они задали такой стандарт качества поддержки языка, что даже Eclipse, обладающий огромным сообществом сдает позиции. Также ввиду того, что Perl не является сугубо веб-ориентированным языком, та концентрация усилий на веб-фреймворках, которая имеет место в случае PHP, просто невозможна. Но с учетом того, что повсеместно набирает популярность толстый фронтенд, это не так страшно.

    Что касается Perl6, то он может как дать второе дыхание языку, так и сыграть с ним злую шутку, как в свое время третья ветка питона, длительное время игнорируемая сообществом ввиду нежелания многих авторов переписывать питоновские библиотеки под новую версию. С другой стороны Perl6 решает важную проблему пятой ветки — наконец появилась спецификация языка, по которой кем угодно может быть написан компилятор, что, во-первых, упростит жизнь разработчикам IDE, во-вторых, позволяет уже сегодня запускать программы Perl6 на нескольких бэкендах, в т.ч. JVM.

    Сейчас прогноз для Perl стабильно-положительный. Не забывайте, что до Perl взлеты переживали и Python и Ruby, и в итоге шум спадал, а языки прочно занимали ту нишу, в которой они правда применимы. Осталось дождаться пока тоже самое произойдет с Javascript…

Мифология


    Perl еще долго будет рассматриваться посторонними не с точки зрения текущей ситуации, а с точки зрения мифов о нем, которые гуляют в сети. Как правило эти мифы затрагивают нечитаемость кода, важность регулярных выражений, моральное устаревание языка, CPAN, Perl6, который очевидно будет нулевым всадником апокалипсиса. Ну и конечно самый главный — о том, что язык мертв.

Его величество нечитаемость


    По заявлением тех, кто жаловался на нечитаемость Perl можно выделить несколько основных проблем:
  • Непонимание зачем нужен unless, этот if с инвертированным условием.
  • Непонимание регулярных выражений. К сожалению те, кто ленятся разобраться как же именно работают регулярные выражение, будут не рады им в любом языке.
  • Двойные сигилы вида $,@,% в конструкциях вида %{$self->{‘posts’}} или же @$posts, в которых жалующиеся видят нечто большее нежели простое приведение типов.
  • Вот этот код:echo "test... test... test..." | perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|\`{;;y;-/:-@\-`{-};\`-{/" -;;s;;$_;see'Но зачем жаловаться на обфусцированный код, когда иные языки возводят обфускацию кода в ранг полезной, а то и обязательной к применению технологии?
  • Отсутствие документации в коде. Дело в том, что часто не принято писать документацию функций в стиле Javadoc — перед каждой функцией. В итоге вся красиво оформленная портянка, документирующая модуль, выносится либо в начало либо в конец модуля. Perl дает такую свободу. Некоторые программисты чувствуют себя настолько свободными, что не пишут документацию вовсе.
  • Куча специальных кавычек и неявных переменных. Тут есть тонкость: вместо таблицы значений переменных следует составить таблицу имен переменных, и тогда все встанет на своих места.

    Несмотря на непривычность синтаксиса относительно многих других языков, мне кажется что главная причина неприятия к нему скрывается в тех темных временах, когда Perl был популярен, а вот правила хорошего тона в написании кода популярны не были. В те времена много на каких языках создавался такой код, что чтению поддается с трудом. Но на Perl этого кода создавалось больше. Вдумайтесь в этот абзац, это не «на любом языке можно писать плохой код». Задайте себе вопрос, а могла ли отрасль удовлетворить потребности в хороших веб-программистах в 1990-х годах или в начале 2000-х? Или же может быть тогда в веб(и как следствие в Perl) за деньгами лезли все, как сейчас лезут в мобильную разработку, загаживая мусором AppStore и PlayMarket?

    Ruby позволяет создавать на базе себя новый язык(DSL), который будет работать. Perl же в этом плане выбрал несколько другой путь — пока вы пишите на любом языке, интерпретатор будет считать, что вы пишите на Perl. С одной стороны вам не нужно как в случае Ruby описывать свой DSL, с другой — интерпретатор может уловить в вашем коде больше смысла, чем другие программисты, обреченные в будущем поддерживать этот код. Чтобы бороться с этим существуют код-стандарты, призванные всячески угнетать творческий потенциал пишущих на Perl. И, как бы тяжело мне ни было это признавать, но они работают, правда работают по большей части в коммерческих компаниях. Это удивительно, но код среднего Perl-проекта на гитхабе выглядит хуже, чем код какого-нибудь коммерческого проекта с закрытым кодом.

    То, насколько сильна в языке обратная совместимость, заставляет думать, что однажды код написанный в 2004 перестанет работать году так в 2024 и выплывет таки наружу. На радость археологам и перло-ненавистникам.

ООП


    В Perl есть 3 проблемы связанные с ООП:
  • отсутствие в стандартной поставке привычного для многих синтаксиса ООП
  • отсутствие понимания какой выбрать модуль для поддержки привычного для многих синтаксиса ООП
  • отсутствие общепринятой методички(как в случае Javascript) с алгоритмом объяснения оппонентам почему первые 2 проблемы — и не проблемы вовсе

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

    Чем-то ситуация сходна с Javascript — только в его случае мы лепим костыли к прототипу функции, чтобы изобразить объект. А в случае Perl мы лепим конструктор к пакету(или модулю, если вам привычней), превращая его в класс. Финал один — сторонники традиционного ООП не наблюдают стандартной инкапсуляции и полиморфизма, зато мы наблюдаем прострацию и фалломорфизм сторонников. Но не легче от этого никому. У Perl в отличие от Javascript сегодня нет той востребованности, чтобы ему прощали мелкие огрехи. Но мы прощаем — почти во всех крупных проектах, что мне попадались, используется стандартное для Perl ООП на базе пакетов, а не одна из библиотек.

    Вообще ООП в Perl стандартное — и именно поэтому делать реализацию с привычным синтаксисом многие мейнтейнеры интерпретатора не видят смысла. Чтобы вы представляли разницу с Javascript — мы не обвешиваем несчастную функцию другими функциями, чтобы получить видимость класса. Мы не патчим прототип функции другой функцией, чтобы получить наследование. В Perl мы создаем пакет(модуль), а дальше у нас есть выбор — импортировать функции из него как из модуля, или добавить в модуль конструктор и использовать его как класс. Ну а если нам нужно наследование, то для этого есть встроенные средства языка, предназначенные именно для этого. С другой стороны объявление классов в Perl самое многословное среди всех языков, с третьей стороны найти в 2014 году редактор без сниппетов становится все сложнее и сложнее.

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

CPAN


    Когда-то важнейшее преимущество Perl, а теперь всего лишь необходимый атрибут, чтобы быть не хуже других языков. Но атрибут не самый плохой из имеющихся. По сравнению с Python, Ruby, Javascript, здесь меньше… хипстеров. Да, да, тех самых ребят столь жаждущих прославить себя на гитхабе. А потом закрепить свою славу в репозиториях пакетов выбранного ими языка. В CPAN таких намного меньше, ведь какой смысл пиариться и набивать строчки в резюме для непопулярного языка. Может быть я не прав, но вы правда верите, что все 110 000 пакетов в npm для веб-ориентированного языка являются полезными и качественными? Даже если предположить, что из-за ноды Javascript стал использоваться не только в вебе, и все эти модули правда полезные вещи или на худой конец байндинги к имеющимся библиотекам, то это же просто минное поле. Физически невозможно вылизать такое большое количество кода от разных людей за столь короткий срок.

    Конкретные цифры по статистике количества модулей для разных языков приводятся в http://www.modulecounts.com/. И видя, что Perl находится в самом низу среди остальных языков, я, как заинтересованное лицо, попробую придумать утешительные объяснения на этот счет. Во-первых, если глянуть на сам CPAN, то модулей там все-таки, больше 140 000. А вот дистрибутивов(коллекция модулей часто, но не всегда, зависящих друг от друга) и правда около 30 000. Т.е. по количеству модулей CPAN все еще лидирует. Модулей в смысле единиц кода, который могут быть подключены и использованы сам по себе. Например есть 2 модуля LWP и LWP::Simple — оба входят в дистрибутив libwww-perl. При этом каждый модуль может быть использован сам по себе и предоставляет разный интерфейс для работы с ним. Хотя модули могут иметь общие зависимости или зависеть один от другого. Но допустим считать именно модули вне дистрибутивов плохая идея(хотя каким образом производится подсчет в репозиториях других языков я могу только догадываться, и у меня есть подозрения, что там могут считаться даже форки), и рассмотрим другие языки.

    С Javascript мы вроде разобрались. С Go ситуация такова, что там попадаются может быть несколько версий одного пакета, судя по индексу, а также *-dev версии. В Python часто принято оформлять как пакет не только библиотеки, но и многие приложения, скрипты. Да, такое есть во всех репозиториях, но в питоне такое попадается мне чаще. Но все же, думаю, что цифры для питона близки к реальности, особенно учитывая, что питон — язык общего назначения да еще и с хорошей репутацией. Хотя не понятен момент как считаются пакеты для 2-ой и 3-ей версий. Что касается Ruby, то все уже расписано. Также данный сайт не показывает количество правок и обновлений к уже имеющимся пакетам. Даже не глядя на ситуацию у других языков, в случае CPAN обновлений много, часто больше сотни в день. За 5 декабря — 194 обновленных модуля в сутки. Мертвые языки так себя не ведут.

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

Вакансии


    Хотя принято считать, что все Perl-программисты сидят без работы, работа на нем есть. Однако есть 2 «но»: во-первых, перловики-джуниоры мало кому нужны, во-вторых, большая часть работы на Perl подразумевает работу в офисе. Т.е. на фрилансе проектов мало и обычно(особенно в рунете) это низкооплачиваемая параша. Да-да именно так, под словом «низкооплачиваемая» я понимаю редкие сдельные проекты стоимостью от 10 до 200 долларов. Под словом «параша» я имею ввиду, что работать вам придется по большей части с людьми, которые хотят либо парсер чужих сайтов, при этом обычно парсер выходит в итоге интеллектуальней заказчика, либо же вы будете делать правки к кастомной CMS(или веб-магазину), которая годами и десятилетиями играет в прятки. И поверьте, лучше бы она в этой игре и с вами вышла победителем.

    Есть некоторые компании, готовые платить вам за перлокод удаленно. Как минимум это oDesk и Buzzfeed. Но вообще их мало. И почасовые ставки там не самые высокие — в основном 15-20$/час. Проекты же выше 30$/час найти тяжело — вас будут силой тащить в офис или отказываться от ваших услуг. При этом продавать себя за 50$/час на том же oDesk реально, но это будет эпизодическая работа. Очень эпизодическая. Наверное этот абзац справедлив для почти любого языка… Найти удаленную работу с оплатой до 2500 $ не так сложно, сложности возникнут когда вы захотите больше. В СНГ мне не удавалось получать удаленную работу с оплатой более 1500 $, может быть получится у вас.

    Но не все так печально, если оторвать задницу от любимого кресла, чтобы обменять его на кресло офисное. Оффлайн-работа на Perl есть как у нас, так и за границей. За границей ее, к слову, особенно много, но не надейтесь, что вас расцелуют в десна и побегут оформлять визу h2-B. Хотя и такие работодатели встречаются. В общем смотрите сами. Будет интересно, если кто-то из читателей в комментариях расскажет, если у него все удачно сложилось и с зарубежными компаниями и с Perl одновременно.

    Если загнивающий запад вам противен, у нас тоже можно поработать перловиком. Порою даже в регионах. Помните CMS, которые играют в прятки? Так вот вы сможете узнать не только когда она спряталась, но и где ее логово, а может быть даже перекинетесь словцом с ее раскаявшимся создателем. И, конечно же, в регионах есть бодишопы, в которых порой нужны перловики.

    В столицах находится наше вечное все — mail.ru, yandex, reg.ru. Наша надежда и опора, живое напоминание того, что Perl все еще нужен. Если вы увидите кого-то на YAPC или Perl Workshop и он разговаривает на русском, то с 90% вероятностью этот докладчик работает где-то в этой тройке. От себя рекомендую reg.ru — приятное собеседование, программисты — профессионалы, каких мало, а также вместо богохульного Skype используется SIP.

    Безусловно, сейчас Perl — это не потолок зарплат, но, по сравнению с другими языками, зарплаты на нем начинаются со среднего уровня. Т.е. вы можете устроиться джуниором PHP-шником или RoR-овцем за 500$(москвичи, молчать!), а для Perl такой вакансии скорее всего не найдется с одной стороны, а с другой требования к миддлу-перловику будут ниже, чем для упомянутых языков. Резюмируя, на Perl работы меньше, чем на многих других языках, но работа это ищется в условиях меньшей нервотрепки — у вас сразу будут нормальные вакансии. И делать на Perl ставку как но основной инструмент удаленного заработка пожалуй не стоит, во всяком случае поначалу.

Веб-разработка


    Писать в наше время веб-сайты на Perl если не грешно, то несуразно уж точно. Так думают многие. И отчасти это верно: даже вся красота Perl не способна компенсировать то несметное множество человеко-часов, которое нужно вложить в веб-фреймворк, чтобы получить нечто, с чем было бы продуктивно работать. И, замечу, все языки маргинальнее PHP, а именно Ruby и Python имеют всего по одному такому монстру.

    Mojolicious, Dancer(?) и Catalyst — вот 3 кита на которых держится современная веб-разработка на Perl. Еще в темных глубинах океана скрываются монстры вроде Maypole и Mason, но на них нарваться можно редко. И, работая с ними, есть риск озолотиться или потерять рассудок. А часто — и то и другое. Но все это немного не то, к чему вы привыкли в других языках, снискавших себе расположение божка веб-программирования.

    В Perl нет интегрированных решений такого уровня как Django, Symfony, RoR. Есть либо микрофреймворки, которые в принципе одинаковы во всех языках, либо Catalyst — тяжелый фреймворк, который более менее соответствует представлениям о том, каким должен быть типовой fullstack MVC-фреймворк для веба. Но вы сами выбираете способ отправки почты, ORM, тестовый фреймворк и т.п. Пусть даже в случае Catalyst у вас будет рекомендуемый ORM, движок шаблонов, но скорее всего в итоге вы обвешаете его кучей всяких вещей, создавая нечто свое. Не существует двух похожих проектов в разных компаниях, которые были бы написаны на Catalyst. И у вас не будет того количества гемов или бандлов, которое есть для RoR и Symfony.

    Интеграция с клиентским кодом, работа с ассетами — в мире Perl все это тоже не подвержено модным веяниям. Вы делаете это как вам заблагорассудится — бывают и такие, кто использует rake с нужными гемами в проектах на Mojolicious. Другое дело, что если вы будете дергать yui-compressor через make-файл, то в Perl мире это будет нормой, а в случае какого-нибудь RoR за такое можно и получить по рукам.

    С одной стороны это все дает полное право говорить об отсталости Perl. С другой стороны, после 3-х лет работы с Symfony и ее прокрустовыми гайдами, я уже не уверен, какой подход к веб-разработке есть меньшее зло. Хороший фреймворк рано или поздно встанет вам поперек работы. У него есть целых два способа сделать это: быть слишком негибким, чтобы вы возопили в попытках вписаться в него, либо же быть достаточно гибким, чтобы вы взвыли от слабой связанности и размазанности алгоритмов по коду.

    Для тех, кто привык к фреймворкам PHP, главная проблема веб-разработки на Perl заключается в том, что вы не можете скачать архив с фреймворком, распаковать, и пихать свой код в папочку src. Вы должны выбрать как вы будете работать с базой — через ORM или запросами, как генерировать формы — руками или используя FormFu, и уже от этого будет определяться на что станет похоже ваше веб-приложение. Это не так страшно — разобраться в чужих проектах на том же Catalyst или Mojolicious несложно, независимо от того, какие модули туда напиханы. Но для программистов на других языках такой подход будет непривычным.

    Сегодня большая часть веб-разработки — это конструктор. Прикрутить регистрацию через соцсети(желательно через все сразу), добавить кнопочки лайков этих же соц. сетей, приделать интеграцию с платежными системами, добавить веб-чат, и т.п. Конечно тут важен даже не язык а наличие готовых SDK, модулей, рецептов. Perl тут однозначно проигрывает, и делать многие типы сайтов на нем не всегда целесообразно. Еще раз, что бы вы прочувствовали — Perl отстает от PHP в том же плане как фреймворк отстает от CMS. Фреймворк может быть безопаснее, быстрее, приятнее для программирования, но в CMS часть работы уже реализована, это сэкономленные человеко-часы. Но если в проекте присутствует хоть какая-то сложная логика и вы не планируете на каждый вызов производительности отвечать горизонтальным масштабированием, то Perl все еще хорошо себя показывает.

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

Perl 6


    Создатель языка Larry Wall любит будоражить народ скорым выходом шестой версии языка. Практически каждый год. А началось это около 2000-ного года. Perl6 выйдет к рождеству, любил говорить он, но по прошествии рождества он ссылается на то, что конкретный год им указан не был. Однако в этот раз он превзошел себя и осмелился сказать больше обычного. Так что может быть в новом году все будет по новому.

    И учитывая степень покрытия спецификаций языка реализацией, может быть в 2015 мы правда увидим Perl6. В пользу этого также говорит тот факт, что кроме Parrot долгое время Perl6 не поддерживал других бакендов, а в последние несколько лет появились C# и JVM бэкенды. И более того, появился бэкенд на базе MoarVM, которая вроде как учитывает недостатки виртуальной машины Parrot. И с большой долей вероятности именно бэкенд на MoarVM станет стандартным для Perl6.

    Perl6 не совместим с Perl5. Синтаксис во многом похож, идеи тоже, но это другой язык. И даже если он будет выпущен в продакшн в следующем году, и даже если удастся добиться производительности уровня пятой версии, обрастание модулями будет долгим. Тем не менее есть надежда, что можно будет использовать модули Perl5 из Perl6. Вернее делать это можно уже сейчас: https://github.com/niner/Inline-Perl5/. Но массово эта технология еще не испытывалась, поэтому тяжело говорить о ее применимости в реальных условиях.

    С точки зрения массового программиста Perl6 правда лучше предыдущей версии — не нужно будет лепить %,@ перед разными типами переменных, появится привычное ООП, станут наконец доступными вызовы методов у простых типов. Правда для того же массового программиста в случае выхода Perl6 мало что изменится — пятая ветка никуда не денется, как и код на ней.

Сообщество


    У Perl большое сообщество. Слишком большое, непростительно большое для мертвого языка сообщество. Более того у отдельных крупных библиотек есть свои группы поддержки, не говоря уже о фреймворках. Обычно помощь можно получить через списки рассылки или же на irc сервере irc.Perl.org, конечно это не отменяет наличие каналов посвященных Perl на Freenode. Да, в наш век irc и списки рассылки выглядят довольно устаревшими, но нет, это замечательные способы организовывать массы людей. Благодаря спискам рассылки легко находить решения проблем, которые были решены еще 10 лет назад, а благодаря IRC можно пообщаться с людьми, которые писали на Perl еще 20 лет назад. Просто смиритесь, что львиная доля активных членов Open Source сообществ все еще сидит в IRC.

    Людей в сообществе Perl настолько много, что поневоле задумываешься, где же они все трудоустроены, если на Perl нет работы. Спишем это на опущение, что Perl настолько хороший язык, что множество людей пишет на нем для души. Или от безысходности — в виду его наличия во многих legacy-программах и компонентах UNIX-систем. Есть особый слой людей, которые больше тяготеют к культуре Perl, чем к программированию на самом языке. Да, у нас тоже есть фанбои. Но назвать их мальчиками язык уже не повернется.

    Кстати найти программистов на Perl довольно просто. Найти хороших программистов на Perl(как и на всяком другом языке) не так-то просто. Найти хороших Perl-программистов на irc.perl.org и получить от них помощь — проще простого. У нас все еще существует(во всяком случае в СНГ) достаточно большой процент людей, которые таки начинали с Perl 10 лет назад и таки используют его до сих пор, а также таки пишут на нем так, как было принято 10 лет назад. Как правило они сидят на фрилансе и пишут те самые грабберы и парсеры или сайты с использованием старого доброго CGI. И эти люди тоже могут давать советы, и эти советы будут работать! Ну что поделаешь, если язык стабильный. А к советам перловиков из рунета(например к моим) надо относиться очень скептически — такой совет, будучи вовремя применен, может помочь не только решить проблему, но и вылететь с собеседования, после выполнения всех заданий.

    Есть еще perlmonks.org. Если по каким-то причинам stackoverflow будет заблокирован Роскомнадзором, то можно будет поискать ответ на свой вопрос там. Нет, это не плохой сайт, просто там обычно мало информации про веб-разработку.

    Сообщество Perl чем-то притягивает, хотя новичков тут все равно мало, но при этом много хороших людей. Хорошо налажена система слетов и конференций, множество их проводится по всему миру. У многих докладчиков хорошее чувство юмора, обычно незлого и неофисного(а офисный юмор — есть выхолощенная злостью и условно оприличенная пошлость), такого что во время выступления не хочется встать и выйти или выключить плеер. Иной, пусть даже технически неинтересный, доклад хорошо идет под тарелку макарон субботним вечером. В сообществе мало пустых споров и агрессии по отношению к сообществам других языков. Из-за того, что хороших перловиков мало, вы скоро увидите, что на всех конференциях в СНГ постоянно мелькают одни и те же лица, так например в августе в Украине был замечен даже сам Larry Wall.

Стоит ли учить Perl?


    Если вы уже знаете какой-то язык, на котором вам удобно писать скрипты для обработки данных, генерации тестовых баз, парсинга и конвертации данных, то Perl вам не нужен. Хотя, честно сказать, некоторые модули для базовых вещей в Perl, вроде работы с почтой и ftp, все же стабильнее, чем в том же питоне.

    Если вы пишете много скриптов на sh, то вам стоит попробовать заставить себя делать привычные вещи на Perl. Дело в том, что в случае однострочников на Perl можно вместить больше функционала в скрипт, который вы еще можете редактировать прямо в консоли, а не создавать для него файл.

    Если вы хотите быстрых и легких денег, то Perl вам не нужен. Хотя в Москве могут и найтись люди, которые будут выкармливать джуниора. Если вы готовы потратить пару-тройку лет и хотите больших денег, то стоит попробовать. Количество legacy-кода на Perl огромно, особенно на западе.

    Если вы хотите профессионально заниматься веб-скрейпингом, то выкиньте из головы все кроме Javascript и phantomjs. На дворе 2014 год и скачивание с последующим парсингом HTML уже не дает желаемого результата. Или используйте байндинги Perl к phantomjs.

    Если вы только начинаете учить программирование, то советую вам ознакомиться с Perl, как с языком, который сочетает в себе несколько парадигм. Даже если вас воротит от синтаксиса самого Perl, советую прочитать Programming Perl, пусть даже на русском: Программирование на Perl, 4-е издание. Просто потому что книга затрагивает кучу других вещей, вроде философии Unix, сетевого программирования, параллельного программирования, концепции регулярных выражений. Эта книга — введение во все то, с чем вы столкнетесь в будущем даже на других языках, причем написана она в том же стиле, что и эта статья.

    Если вы программист на компилируемом языке, или работаете с микроконтроллерами, но не планируете лезть в веб, то однозначно стоит изучить Perl — даже на минимальном уровне владения им у вас появится мощный инструмент для кодогенерации и всяких мелких сборочных скриптов. Генерация портянок if/switch для драйверов по таблицам из документации, таблиц конечных автоматов и т.д.

    Если вы планируете всерьез заниматься сетевым программированием, то Perl может быть вам полезен как минимум для прототипирования, создания тестового траффика и серверов-заглушек.

    Если вам нравится писать код в любимом текстовом редакторе, а любители IDE обвиняют вас в неуместном ретроградстве, то Perl будет очень хорошим выбором — используя язык, для которого нет удобной IDE, у вас появится веское оправдание почему вы ее не используете.

Так почему Perl а не что-то другое?


    Каждый решает для себя сам. Что же лично мне нравится в Perl, среди более-менее доказуемых вещей:
  • Отдельные операторы для сравнения и конкатенации как для строк, так и для чисел
  • Широкая трактовка false: «», 0, undef, () взаимозаменяемы в разумных пределах, без драконовских сравнений при помощи === как в Javascript и PHP
  • Строгий синтаксис, в реальных проектах он правда строгий, вы не найдете там тех ужасов, которые, как принято считать, имеют место в каждой Perl-программе.
  • Объявление переменных с указанием области видимости, а также локализация внешних переменных внутре блока.
  • Подход к документированию модулей CPAN — обычно для того, чтобы пользоваться модулем достаточно прочесть секцию Synopsis.
  • Удобное присваивание в списочном контексте.
  • Работа с юникодом — иногда мне кажется, что мейнтейнеры Perl в первую очередь вылизывают ее, а все остальное уже делают по остаточному принципу.
  • Неявная переменная $_, как this из Javascript, только удобнее. Потому что $_ в отличие от this можно не использовать.
  • Идеальная подборка функций, которые не надо импортировать, работа с файлами, регулярки, дата, рандом, обход каталогов, sleep, printf…
  • Простота языка — можно писать на небольшом подмножестве синтаксиса.
  • Можно писать в стилистике близкой к PHP и код будет соответствовать общепринятым на сегодняшний день представлениям о том, как должен выглядеть код.
  • Однострочники, запускаемые в командной строке. Да, эта возможность есть почти у всех интерпретаторов других языков, но тут все продумано и удобно.
  • POD, оно смотрится красиво, оно выглядит как документация. А не как аннотация типа Javadoc.
  • На нем удобно писать обслуживающие скрипты, которые рано или поздно требуются для крупного веб-приложения.
  • Отсутствие сигнатур аргументов позволяет не делать рефакторинг всех вызовов подпрограммы, а просто проверять в подпрограмме был ли передан аргумент.
  • Perl есть практически на любом юниксе у любого хостера. Да питон тоже, но там может быть двойка, тройка и непонятно какие библиотеки.
  • Конференции, много конференций. Одна история удивительней другой.
  • У нас есть целый ежемесячный журнал на русском языке, посвященный Perl
  • Legacy на Perl это интересно, там есть на что посмотреть, особенно на способы масштабирования дооблачной эпохи.
  • Стабильность языка сравнима разве что с С и Java.
  • Простой деплой через копирование кода через проводник. Сложный деплой через свой CPAN репозиторий. Новомодный деплой через Carton. Старческий деплой через Makefile. И все приемлемо сообществом.
  • Приятные собеседования. Чаще всего предлагают тестовые задания или ведут общие разговоры. Никакой зубодробительной ботаники.
  • Среди коллег мало молодых и восторженных. В основном люди просто делают свою работу.
  • Культура, проповедующая множество способов сделать одну и ту же вещь, устраняет в команде многие конфликты.

    И главное — Perl не мешает думать, в отличие от многих языков. Тут нет понятия правильно и неправильно, можно сосредоточиться на решении задачи, а не на том, чтобы все было согласно высокому штилю. Конечно есть какие-то нормы, стандарты кодирования — но это не тот уровень, это уровень регламентированных правил. Тут не нужно за кем-то гнаться, не нужно прислушиваться к мнению суперстаров, не нужно пытаться соответствовать какому-то эталону. Вам не нужно использовать правильную библиотеку, которая сейчас в моде. Вы можете делать так, как вам удобно, а это непозволительная роскошь для многих мейнстримовых языков.

    Вне работы у вас будет полное право писать трэшовый говнокод родом из 90-х, а если вы выложите этот код в качестве решения на форум, то его не засмеют. В сообществе не принято дешевое самоутверждение, зато все понимают, что уровень владения языком у всех разный. Здесь не гонятся за совершенным кодом, потому что каждый день видят не только сложные системы, но и скрипты написанные на коленке. Это своеобразная прививка от панической боязни говнокода, которой так пронизаны многие сообщества других языков.

В заключение


    Сколько кота в нос не целуй — он все равно пританцовывает.

Быстрый старт в Perl

Perl — высокоуровневый интерпретируемый динамический язык программирования общего назначения, созданный Ларри Уоллом, лингвистом по образованию[Wikipedia]. Появился в 1987 году.

Этот язык программирования богат возможностями по работе с текстом, что определяет основную область его применения — манипуляции с текстом, в частности парсинг.

В этой статье будут описаны шаги по установке среды исполнения Perl, выбору средств разработки и созданию первой программы. В конце этого руководства вы найдете список источников, которые помогут быстро освоить основы Perl, а также изучить язык более углубленно.

Perl — это единственный язык, программы на котором выглядят одинаково до и после RSA-шифрования.

На момент написания этого материала актуальной версией интерпретатора является 5.22.0. Perl 6 готовится к релизу в 2015 году, но еще недостаточно документирован.

Язык программирования Perl крайне не рекомендуется брать в качестве языка для знакомства с программированием. Если вы абсолютный новичок — лучше начните с чего-нибудь менее губительного для вашего неокрепшего сознания. Серьезно, вот что говорил об этом языке Йон Риббенс:

PHP — это маленькое зло, созданное некомпетентными новичками, в то время как Perl — это большое и коварное зло, созданное умелыми, но извращёнными профессионалами.

К слову сказать, с PHP начинать тоже не стоит. А теперь ближе к делу.

Среда исполнения

На данный момент Perl официально поддерживается тремя ведущими платформами: Mac OS X, Unix и Windows. На первых двух из них среда исполнения Perl является предустановленной, и ее версию можно узнать через команду perl -v (свежую версию можно скачать здесь), а для операционных систем семейства Windows интерпретатор Perl доступен для скачивания на этой странице.  Рекомендуется выбирать ActivePerl (дистрибутив от ActiveState) как самый распространенный.

Интегрированная среда разработки (IDE)

Perl, к сожалению, не очень популярен среди разработчиков сред разработки, поэтому на выбор вам предоставлено лишь небольшое количество специализированных инструментов.

Padre, the Perl IDE

Мультиплатформенная легковесная среда разработки, созданная специально для Perl и удобная для новичков. Помимо традиционных подсветки синтаксиса и автодополнения, имеет также встроенные инструменты рефакторинга. Кстати, Padre сама написана на Perl 5.

Ссылка на скачивание с официального сайта.

EPIC

Среда разработки, основанная на Eclipse. Подойдет для тех, кто собирается углубиться в Perl. Также поддерживается всеми основными платформами, однако обладает большим функционалом: в частности, поддерживает инспекцию переменных, навигацию по краткой документации и средства отладки (для последнего необходимо скачивать дополнительный модуль).

Инструкция по установке на официальном сайте. Перед установкой вам необходимо иметь на компьютере Eclipse (версии, не ниже 3.6), среду исполнения Java (JRE) и интерпретатор Perl (инструкции по его установке даны выше).

Об установке дополнительных плагинов для EPIC можно почитать здесь.

Текстовые редакторы

Как и в случае с любым языком программирования, конечно же, вам предоставляется огромное множество мультиплатформенных текстовых редакторов на выбор: от предустановленных блокнотов до более удобных средств редактирования исходного кода с подсветкой синтаксиса, автодополнением и т.п. В частности, обратите внимание на:

  • KomodoEdit — урезанная версия коммерческой среды разработки Komodo IDE, разрабатываемая ActiveState (той самой, которая поддерживает дистрибутив ActivePerl), располагает функциями автодополнения, подсветки синтаксиса, множественных курсоров и подсказок из документации;
  • Vim — текстовый редактор, интерфейс которого может оказаться непривычным для Windows-пользователя; поддерживает подсветку синтаксиса;
  • Sublime Text — один из самых популярных инструментов редактирования исходного кода с подсветкой синтаксиса, автодополнением и т. п., функционал которого расширяется множеством существующих плагинов;
  • Notepad++ — легковесный текстовый редактор, отличающийся наиболее корректной, после KomodoEdit, подсветкой синтаксиса; функционал может быть расширен плагинами, однако специально для Perl их существует довольно мало.
CodeGround

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

Первый «Привет, мир!» на Perl

Традиционно предлагаем начать знакомство с новым языком со всем хорошо известной программы:

print "Hello World\n";

Сохраните эту строку в файле hello.pl и запустите только что созданную вами программу командой:

perl hello. pl

Однако прежде убедитесь, что исполняемые файлы Perl есть среди ваших переменных среды (переменных окружения), а также в том, что вы вызывается perl из папки с исходным файлом hello.pl. В случае успеха, вы увидите ожидаемое «Hello, world!»

Поздравляем, вы начали писать на Perl!

А дальше — в путь…

Отличное англоязычное руководство по языку программирования Perl для быстрого старта вы можете найти на сайте tutorialspoint.com. Помимо этого, существует официальный обучающий ресурс — learn.perl.org.

Среди русскоязычных руководств отметим перевод мультиязычного Учебника Perl. В нем переведены не все главы, однако в качестве основы ресурс вполне пригоден.

Если же вам не по душе изучение посредством чтения, вы можете посмотреть видео-уроки на YouTube в составе следующих плейлистов:

Если вам удастся найти хорошие видео-уроки по Perl на русском языке, обязательно напишите нам об этом в комментарии к этой статье или на почту chief@tproger. ru.

Естественно, вам не обойтись без официальной документации. Скачать оффлайн-версию в HTML и PDF формате можно на этой странице.

Среди книг для начала и продолжения обучения отметим:

Список рекомендуемых к прочтению книг вы можете найти также здесь.

Спасибо за внимание и успехов в изучении Perl!

Введение в язык программирования Perl

Что такое Perl? Это сокращенное название языка программирования Practical Extraction and Report Language (Практический язык извлечений и отчетов). Что подразумевается под «извлечениями» и «отчетами»? Почему практический язык? Для чего он предназначен? Какие задачи можно решать с его помощью? Эти и многие другие вопросы возникают, естественно, у любого человека, хоть немного знакомого с информатикой, когда он впервые сталкивается с новым для него языком программирования. Эта глава и задумывалась как ответ на поставленные выше вопросы, так как зная, что может, для чего предназначен язык программирования (а время универсальных языков, кажется, миновало), программист, в конечном счете, решает, а стоит ли тратить время на его изучение. Хотя здесь также встают вопросы о легкости и быстроте освоения нового языка, доступности компиляторов, существовании службы его поддержки, стоимости и т. д. Об этом также пойдет речь в этой главе, которая познакомит читателя с огромным миром Perl-программирования, и станет той отправной точкой, с которой он, мы надеемся, стремительно и без оглядки войдет в него и останется в нем навсегда.

Язык Perl родился в недрах операционной системы Unix как реакция одного талантливого программиста на ограниченную возможность стандартных средств системного администрирования в этой операционной среде. Авторы прекрасно осознают, что большинство читателей знакомы с Unix, возможно, только по названиям книг, лежащих на полках магазинов, так как традиция изучения информационных технологий в нашей стране связана больше с операционными системами семейства Microsoft Windows [Под семейством операционных систем Microsoft Windows понимаются операционные системы Windows 95/98/NT.], чем с системой UNIX, которая является базой изучения информатики в западных университетах. Поэтому для воспитанных в традициях Windows читателей мы сделаем небольшое отступление и кратко охарактеризуем процедуру администрирования UNIX, которая радикально отличается от аналогичной работы в операционной системе Windows.

Под администрированием понимается настройка операционной системы через установку значений ее параметров таким образом, чтобы она отвечала потребностям отдельного пользователя или группы пользователей. В системах семейства Windows подобная работа выполняется с помощью Реестра, представляющего собой базу данных двоичных данных, а для изменения параметров используется специальная программа regedit. В системе UNIX настройка осуществляется через специальные конфигурационные файлы, являющиеся обычными текстовыми файлами, и все изменения осуществляются выполнением команд, написанных на специальном языке оболочки (shell) и выполняемых, как правило, из командной строки. (Несколько лет назад на персональных компьютерах была широко распространена операционная система MS-DOS фирмы Microsoft, в которой для ввода команд также использовалась командная строка, поэтому читателю, работавшему в этой операционной системе, командная строка знакома. ) В системе UNIX пользователь может создавать собственные команды на основе команд интерпретатора shell, сохранять их в обычных текстовых файлах и впоследствии выполнять также, как обычные стандартные команды операционной системы через командную строку. Следует отметить, что оболочка shell операционной системы UNIX является интерпретатором, в связи с чем команды пользователя имеют еще одно название — их называют сценариями или скриптами (script). Администратору операционной системы UNIX приходится писать большое количество скриптов, которые обрабатывают другие скрипты — текстовые файлы. Для этих целей обычно кроме командного языка оболочки shell используются специальные программы обработки текстовых файлов:

  • awk — программа сопоставления с образцами и генератор отчетов;
  • sed — пакетный редактор текстовых файлов.

Обе эти программы являются фильтрами, которые последовательно считывают строки входных файлов и выполняют применимые к строке действия, определенные с помощью команд этих программ. Основными действиями являются выделение цепочек символов по заданным шаблонам, замена их по определенным правилам и генерирование новых файлов.

Теперь можно перейти и к объекту нашего изучения — языку Perl, тем более что, как нам кажется, читателю уже должно быть понятно, почему он называется языком извлечений и отчетов. И начнем мы с истории его создания и разработки, которая, по существу, позволяет полнее понять его содержание.

История языка Perl

Perl был разработан Ларри Уоллом (Larry Wall) в 1986 году, когда он являлся системным администратором одного проекта UNIX, связанного с созданием многоуровневой безопасной сети, объединявшей несколько компьютеров, разнесенных на большие расстояния. Работа была выполнена, но потребовалось создание отчетов на основе большого числа файлов с многочисленными перекрестными ссылками между ними.

Первоначально Ларри предполагал использовать для этих целей фильтр awk, но оказалось, что последний не мог управлять открытием и закрытием большого числа файлов на основе содержащейся в них же самих информации о расположении файлов. Его первой мыслью было написать специальную системную утилиту, решающую поставленную задачу, но вспомнив, что до этого ему уже пришлось написать несколько утилит для решения задач, не «берущихся» стандартными средствами UNIX, он принял кардинальное решение — разработать язык программирования, который сочетал бы в себе возможности обработки текстовых файлов (sed), генерации отчетов (awk), решения системных задач (shell) и низкоуровневое программирование, доступное на языке С. Результатом этого решения и явился язык Perl, интерпретатор для которого был написан на С.

По утверждению самого Ларри Уолла при создании языка Perl им двигала лень — не в прямом смысле, а в смысле того, что для решения стоявшей перед ним задачи следовало бы написать большое количество программ на разных языках, входящих в состав инструментальных средств UNIX, а это достаточно утомительное занятие.

Новый язык программирования сочетал в себе возможности системного администрирования и обработки файлов — две основные задачи, решаемые обычно при программировании в системе UNIX. Причем следует отметить, что язык Perl появился из практических соображений, а не из-за желания создать еще одно «красивое» средство для работы в UNIX, поэтому-то он и получил широкое распространение среди системных администраторов, когда Ларри Уолл предоставил его широкому кругу пользователей. С появлением языка Perl появилась возможность решать задачи с помощью одного инструмента, и не тратить время на изучение нескольких языков среды программирования UNIX.

Первая версия языка не содержала многих возможностей, которые можно найти в последней версии Perl, с которой читатель познакомится в нашей книге и которая идентифицируется как версия 5.005_03 и считается устойчивой. Первоначально язык включал:

  • простой поиск по строковым образцам (шаблонам) в файлах;
  • дескрипторы файлов;
  • скалярные переменные;
  • форматы.

Вся документация умещалась на 15 страницах, но Perl решал задачи быстрее, чем sed или awk, и быстро стал использоваться не только для решения задач системного администрирования.

В дальнейшем сам Ларри Уолл позаимствовал у Генри Спенсера (Henry Spencer) пакет для работы с регулярными выражениями и модифицировал его для языка Perl. Другие функциональные возможности были разработаны не только Ларри Уоллом, но и его друзьями и коллегами, и включены в состав языка. Опубликование в Internet привело к появлению сообщества единомышленников, которые не только эксплуатировали, но и развивали язык. Он и по настоящее время продолжает интенсивно развиваться за счет разработки пакетов, реализующих новые применения языка к развивающимся информационным технологиям. В табл. 1.1 представлена динамика появления новых версий языка Perl, начиная с самой первой:

Таблица 1.1. Версии языка Perl и даты их выпуска

ВерсияДата выпуска
Perl 1Январь, 1988
реrl 2Июнь, 1988
реrl 3Октябрь, 1989
реrl 4Март, 1991
Perl 5Октябрь, 1994

В настоящее время, как уже отмечалось ранее, устойчивой версией считается версия Perl 5. 005_03, но уже существует версия 5.005_67. Их все можно получить с основного узла Web, поддерживающего язык Perl, по адресу http://www.Perl.com.

Замечание
В литературе по языку Perl принято, ссылаясь на сам язык, писать его с прописной буквой (Реп), а строчными буквами (Perl) обозначать интерпретатор языка. По образному высказыванию самого Ларри Уолла: «Perl — это ничего более как всего лишь интерпретатор Perl».

Характерные черты Perl

Perl — это интерпретируемый язык, оптимизированный для просмотра содержимого текстовых файлов, выделения из них информации и генерирования отчетов на основе этой информации, а также просто хороший язык для выполнения многих задач системного администрирования UNIX. Он обладает большим набором преимуществ как язык сценариев общего назначения, которые проявляются через его характерные черты и возможности.

Первым в цепочке достоинств языка Perl мы назовем его интерпретируемость. Конечно, некоторые программисты, прочитав это, скажут: «Ну вот, нашли себе достоинство. Посмотрим, как быстро будет выполняться программа Perl длиной, скажем, в тысячу операторов?». Что ж, замечание существенное, если рассматривать Perl как язык создания больших информационных систем, и совершенно не выдерживающее критики, если вспомнить, для чего он предназначен — задач администрирования и обработки текстовых файлов — небольших по размерам сценариев, решающих нетрадиционные задачи, для программирования которых могло бы потребоваться взаимодействие нескольких специализированных языков. Разработка подобных решений с помощью компилируемых языков программирования потребовала бы на много больше времени, чем использование одного интерпретируемого: ведь цикл разработки программ на таком языке короче и проще, чем на компилируемом. Мы постепенно создаем программу, добавляя необходимые операторы, и сразу же получаем результаты, когда она завершена: интерпретатор Perl постепенно компилирует все операторы во внутренний байт-код и программа готова к выполнению, как только в ней поставлена последняя точка (точнее точка с запятой, завершающая Последний оператор). Для небольших по объему программ — это достаточное преимущество, так как отладка занимает много времени. Да, интерпретируемая программа, естественно, будет выполняться медленнее программы, представленной в формате двоичного файла и выполняющейся без предварительной обработки интерпретатором, но если в этом возникнет необходимость, то можно решение на языке Perl использовать в качестве прототипа для компилируемого языка, например С. Суммируя все сказанное, можно заключить, что Perl позволяет легко и быстро получить требуемое решение задачи, сочетая в себе элементы компилируемых и интерпретируемых языков программирования.

Замечание
Интерпретатор Perl, как, вероятно, заметил внимательный читатель, отличается от традиционных интерпретаторов тем, что программа транслируется в промежуточный байт-код, и только после этого выполняется. В традиционных интерпретаторах каждый вводимый оператор интерпретируется и сразу же выполняется, что может приводить к синтаксическим ошибкам во время выполнения. Perl-программа свободна от этого «недостатка», так как все синтаксические ошибки обнаруживаются во время трансляции в байт-код.

Вторым преимуществом использования Perl для решения соответствующих задач (мы имеем в виду сетевые возможности) является его доступность для большинства серверных платформ:

  • практически все варианты UNIX;
  • MS-DOS;
  • Windows NT;
  • Windows 95/98;
  • OS/2;
  • Macintosh.

Для всех перечисленных платформ разработаны и свободно распространяются интерпретаторы Perl вместе с документацией по их установке и работе, что приятно отличает его от других программных средств. И здесь уместно сказать несколько слов об условиях использования и распространения самого Perl и разработанных на нем программ. (О том, где можно найти и получить интерпретатор Perl, см. главу 16.)

Одним из способов распространения свободно распространяемого программного обеспечения, а именно таков интерпретатор Perl, является использование Общей открытой лицензии GNU. По условиям этой лицензии файлы исходного текста программного продукта распространяются совершенно свободно и могут быть использованы любым лицом. Однако любые версии программы, созданные путем модификации этого кода, должны реализоваться также на условиях Общей открытой лицензии GNU, т. е. следует предоставлять файлы исходных текстов нового продукта любому, кто их захочет иметь. Этого зачастую вполне достаточно, чтобы защитить интересы автора первоначального программного продукта, однако может приводить к большому количеству производных версий исходного продукта, что приводит к «отчуждению» автора исходного продукта от процесса модификации его детища. Более того, в связи с большим количеством разнообразных версий, пользователям становится трудно определить, какая версия пакета является на текущий момент окончательной, будут ли написанные им сценарии, если речь идет о Perl, правильно работать с имеющейся у него версией, и т. п.

В связи с изложенными недостатками лицензии GNU, интерпретаторы языка Perl выпускаются на условиях лицензии Artistic License (Артистической лицензии), которая является некоторой вариацией лицензии GNU, и ее смысл заключается в том, что любой, кто выпускает пакет, полученный на основе Perl, должен ясно осознавать, что его пакет не является истинным пакетом Perl. Поэтому все изменения должны быть тщательно документированы и отмечены, выполнимые модули, в случае изменения, должны быть переименованы, а исходные модули должны распространяться вместе с модифицированной версией. Эффект от подобных условий заключается в том, что автор первоначального продукта всегда определяется как его владелец. При использовании Artistic License все условия Общей открытой лицензии GNU остаются в силе, т. е. она продолжает применяться.

Третьим преимуществом языка Perl можно назвать его практическую направленность, т. е. он создавался из практических соображений решения задач администрирования и разработки приложений для UNIX, а это означает, что он обладает следующими важными свойствами:

  • полнотой;
  • простотой использования;
  • эффективностью.

Под полнотой Perl понимается его способность решать все возникающие в системе UNIX в связи с ее администрированием задачи. И это действительно так! Ведь язык Perl, как отмечалось выше, вобрал в себя все наилучшие возможности стандартных средств администрирования UNIX, перечисленных в табл. 1.2.

Таблица 1.2. Стандартные средства администрирования UNIX

Язык программированияХарактеристика
awkЯзык выделения по образцам информации из текстовых файлов
CКомпилируемый язык общего назначения для решения задач низкого уровня
shellОсновной командный язык запуска программ и скриптов, написанных на других языках программирования
sedПотоковый редактор обработки текстовых файлов

Эти средства продолжают использоваться, так как каждое из них является прекрасным инструментом для выполнения тех задач, для которых они предназначены, однако все то, что можно выполнить, комбинируя эти средства, можно реализовать в одной Perl-программе, изучив только один язык. Но возможности Perl не ограничиваются только задачами администрирования. Подключаемые пакеты и модули позволяют легко и быстро решать и другие задачи, для которых, возможно, пришлось бы использовать язык программирования С. Начиная с версии 5.0, язык Perl поддерживает технологию объектно-ориентированного программирования, причем пакеты и модули можно оформить в виде объектов и использовать без знания содержащегося в них кода (хотя придется изучить большое количество объектных моделей со своими свойствами и методами).

Perl — это язык, на котором программист может делать свою работу, причем для выполнения одной и той же задачи Perl предлагает несколько средств ее реализации. Одни из них более сложны, другие — менее. Разработчик может выбрать то, которое ему более понятно и которое ему проще применить, не тратя времени на изучение более сложных возможностей. В этом заключается простота использования Perl, которая позволяет применять его как для реализации одноразовых утилит, так и для создания сложных, часто используемых приложений.

Perl является прямолинейным языком, а это означает, что простые программы не надо оформлять в виде головных процедур main, как это принято в большинстве процедурных языков программирования, или в форме класса, как принято в объектно-ориентированных языках программирования, т. е. не надо тратить время на дополнительное форматирование исходного текста программы, а просто начинать писать операторы Perl, которые будут немедленно обрабатываться интерпретатором. Именно в этом заключена эффективность языка программирования Perl.

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

И здесь, в первую очередь, следует обратить внимание на простое включение в Perl-программу вызовов библиотечных процедур языка С, что позволяет использовать огромное количество кода, написанного для этого популярного языка. В поставку Perl входят утилиты, конвертирующие заголовки библиотек С в соответствующие эквиваленты языка Perl. Конвертирование осуществляется с помощью XS-интерфейса, который представляет собой простой программный интерфейс, преобразующий среду вызова функций С в среду вызова подпрограмм Perl. Последующий вызов функций С ничем не отличается от вызова подпрограмм самого Perl. Более того, программы Perl версии 5.0 легко интегрируются в приложения С и C++ через интерфейс, реализованный в наборе функций Perl_call_*.

Для работы с базами данных можно самому написать соответствующее приложение на языке С, а можно воспользоваться свободно распространяемыми модулями дополнительных расширений возможностей Perl, включающих работу с многочисленными популярными системами управления базами данных: Oracle, Ingres, Informix, Interbase, Postgre, Sybase 4 и др.

Способность Perl работать с сокетами TCP/IP сделала его популярным для реализации информационных систем взаимодействия с сетевыми серверами любых типов, использующих сокеты в качестве механизма обмена информацией. Именно эта возможность в сочетании с использованием Perl для создания CGI-сценариев послужила широкому распространению языка на других многочисленных платформах.

И в завершение перечисления достоинств Perl обратим внимание читателя на пятое преимущество его использования: так как изначально этот язык являлся свободно распространяемым, то вся наработанная документация также доступна совершенно бесплатно, а так как Perl, как язык сценариев очень популярен, то в Internet находится море документации по его применению для решения разнообразных задач.

(Некоторые адреса можно найти в главе 16.)

Области применения Perl

Наиболее широко Perl используется для разработки инструментов системного администрирования, однако в последнее время он получил огромную популярность в области разработки Internet-приложений: CGI-сценарии,

системы автоматической обработки электронной почты и поддержки узлов Web. В этом параграфе мы кратко охарактеризуем возможности Perl в каждой из указанных областей.

Системная поддержка UNIX

Как отмечалось ранее, именно задача соединения в одном языке программирования возможностей различных средств системного администрирования UNIX и послужила толчком к разработке и созданию языка Perl. Он и разрабатывался таким образом, чтобы оптимизировать решение именно этих задач, не прибегая к другим инструментам. На настоящий момент язык Perl является основным средством администрирования UNIX, который может выполнять работу нескольких других традиционных средств администрирования. Именно эта его универсальность и способствовала его широкому распространению среди системных администраторов и программистов UNIX, тем более, что он решает задачи обычно быстрее, чем другие аналогичные средства.

CGI-сценарии

Одной из первых, но продолжающей и по настоящее время широко применяться в Интернете технологией реализации динамических эффектов является технология CGI-сценариев, суть которой заключается в обработке информации, получаемой от пользователя, которую он вводит в поля формы страницы HTML, просматриваемой с помощью программы-обозревателя Internet. Информация из полей формы пересылается на сервер с помощью протокола HTTP либо в заголовке, либо в теле запроса и обрабатывается сценарием, который после анализа полученных данных выполняет определенные действия и формирует ответ в виде новой страницы HTML, отсылаемой обратно клиенту. Сценарий может быть написан, собственно говоря, на любом языке программирования, имеющем доступ к так называемым переменным среды, но сценарии Perl получили наибольшее распространение из-за легкости создания и оптимизационных возможностей языка Perl при обработке текстовых файлов. В Internet можно найти буквально тысячи примеров динамического CGI-программирования на Perl.

Его большая популярность для реализации подобных задач на UNIX-серверах Internet привела к тому, что разработчики серверов Internet, работающих в других операционных системах, стали включать возможность подключения сценариев Perl в свои системы. В настоящее время их можно использовать и на сервере Internet Information Server фирмы Microsoft для операционных систем семейства Windows, и на серверах Apache, NCSA и Netscape для операционной системы UNIX.

Обработка почты

Другая популярная область применения Perl — автоматическая обработка электронной почты Internet. Сценарии Perl можно использовать для фильтрации почты на основе адреса или содержимого, автоматического создания списков рассылки и для решения многих других задач. Одной из наиболее популярных программ для работы с электронной почтой является программа Majordomo, полностью реализованная средствами Perl.

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

Поддержка узлов Web

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

Его возможности записи и чтения в/из сокетов позволяют использовать сценарии Perl для взаимодействия с другими узлами и получения информации на основе протокола HTTP. Следует отметить, что существуют даже серверы, написанные на Perl. Как упоминалось ранее, именно эти возможности Perl можно использовать для удаления со страниц HTML узла Web ссылок на несуществующие другие узлы.

Perl может работать и с протоколом FTP. Это позволяет автоматизировать получение файлов с других узлов, а в сочетании с его возможностями обработки текстовых файлов позволяет создавать сложные информационные системы.

* * *

В этой главе мы попытались кратко охарактеризовать сам язык Perl, очертить основные области его применения и привлечь внимание читателя к его дальнейшему изучению и внедрению в собственную практику. В конечном счете только сам программист решает, нужен ему соответствующий язык или нет. Мы думаем, что наш уважаемый читатель уже сделал свой выбор и надеемся, что он не покинет нас до самой последней страницы книги.

Вопросы для самоконтроля

  1. Назовите полное наименование языка Perl.
  2. Что послужило толчком для разработки и создания Perl?
  3. Каково назначение Perl-программы?
  4. В чем заключаются преимущества и недостатки интерпретируемых языков?
  5. Перечислите основные достоинства языка Perl.
  6. Перечислите области применения Perl.

Языки программирования

Larry Wall

27.09.1954

История

Perl — это язык программирования, хорошо приспособленный для работы с регулярными выражениями. Операционная система UNIX ввела в практику системного программирования сценарий на языке командного интерпретатора shell, который можно рассматривать как язык программируемых процессов для управления выполнением программ на компьютере. Данными, обрабатываемыми этими сценариями, были программы и файлы, входящие в систему компьютера. В качестве вспомогательных средств для программирования на языке командного интерпретатора shell были разработаны разнообразные языки для обработки строковых данных. Одними из первых были AWK, появившийся в 1977 году (назван в честь своих авторов — Альфреда В. Ахо, Питера Дж. Вейнбергера и Брайана В. Кернигана , и SED, потоковый редактор (stream editor), созданный по образцу одного из первых редакторов UNIX ed.

Поскольку AWK был предназначен для работы с файлами определенной регулярной структуры, его можно было использовать, например, следующим образом: взять файл, состоящий из имен и соответствующих им адресов электронной почты, и, используя AWK, разослать по всем этим адресам письма. Для этого нужно было написать shell-сценарий, содержащий цикл, на каждом шаге которого вызывался бы AWK для извлечения очередного адреса электронной почты из файла, после чего сообщение могло быть отправлено соответствующему адресату. Зная язык командного интерпретатора shell и возможности сопоставления с образцами AWK, программист достаточно легко мог создать подобный процесс обработки списка рассылки.

Для облегчения shell-программирования в UNIX было разработано много новых языков управления процессами типа AWK. Язык Perl (Practical Extraction and Report Language) был создан в 1986 году Ларри Уоллом для решения задач управления конфигурацией сети, состоящей из нескольких компьютеров. Вначале Уолл использовал механизм под названием B-news, но он неадекватно выполнял задачу создания и обработки необходимых отчетов. AWK не мог одновременно открывать и закрывать множество файлов. В результате появился новый язык Perl, который унаследовал некоторые черты предшественников — языков AWK и SED, но более подходил для данного применения.

Сначала язык назывался PEARL (жемчуг), но поскольку так назывался существующий графический язык, было решено сократить название. В языке были предусмотрены скалярные данные, возможность сопоставления с образцом, управление и обработка файлов. Со временем появились новые версии этого языка, последняя включает возможность объектно-ориентированного программирования. Широкое распространение WWW привело к открытию, что Perl является одним из наиболее подходящих языков для программирования задач интерактивного взаимодействия в Web — задач обработки на сервере информации, введенной пользователем на web-странице.

Краткий обзор языка

Perl — это интерпретируемый язык, предназначенный для эффективной обработки текстов. Синтаксис языка Perl построен по образцу языка С, так как исходно Perl развивался как командный язык в операционной системе UNIX, где С являлся основным языком программирования. Ввиду сходства с С Perl столь же удобен (или неудобен — в зависимости от того, считаете ли вы С удобным для чтения) для чтения, как и С.

Переменные в языке Perl начинаются с символа $ и могут содержать как целые числа, так и строки. Также в Perl имеются массивы скаляров и ассоциативные массивы. Ассоциативные массивы называются также массивами с адресацией по содержанию, поскольку для доступа к информации можно пользоваться не только индексами массива, но и содержанием элемента. Например, в большинстве современных операционных систем с программой ассоциирована некоторая среда или окружение, содержащее переменные с определенными значениями. В языке Perl это окружение доступно при помощи специального ассоциативного массива $ENV. Одним из элементов этого окружения (в системе UNIX) является идентификатор (ID) пользователя. В Perl достаточно написать следующий оператор:

print «Пользователь этой программы: $ENV{‘USER’}\n»;

и на экране монитора будет напечатано имя пользователя (переменная окружения USER), причем не потребуется определять, где в окружении хранится информация об ID пользователя. Этот пример показывает, как легко Perl интегрируется в операционную систему для создания сценариев обработки процессов.

Простая программа Perl состоит из последовательности операторов print. Она также включает обычные последовательности структур управления наподобие циклов for, while и until и условного оператора if. Особенно удобен оператор foreach, который позволяет совершать цикл по всем элементам массива и выполнять для каждого из них какие-то действия, не зная заранее о размерах массива. В Perl, как и в некоторые другие языки создания процессов, встроена возможность обрабатывать регулярные выражения. Логическая операция =~ представляет собой результат сопоставления строки с образцом. Операция $ENV{ ‘USER’}=~mvz проверяет, содержится ли в строке $ENV{ ‘USER’} регистрационное имя mvz (то есть зарегистрирован ли пользователь этой программы под указанным именем). Операция ! ~, напротив, осуществляет проверку на отсутствие соответствия.

Пример



#!/usr/local/bin/perl
# Hello.cgi - Моя первая программа CGI
print "Content-Type: text/html\n\n";
print " \n";
print "";
print "\n";
print "\n";
print "Hello, World!\n";
print " \n"; 


Возможности и назначение языка Perl

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

Отлично справляется с обработкой различного типа данных, поэтому часто используется при написании различного вида парсеров и ботов. Может использоваться для задач системного администрирования.

Одной из современных «ниш» для языка Perl стала веб-разработка. На нём написано немало веб-фреймворков — как микрофреймворков, так и полнофункциональных MVC-фреймворков. Многие компании разрабатывают свои движки на языке Perl — это регистраторы доменных имён и хостинг-провайдеры, поисковые системы, SEO-компании, медиакомпании, разработчики онлайн-игр и т.д.

В последние годы язык Perl переживает свой «ренессанс», своего рода возрождение — очень многое было доработано как в самом языке (к примеру, появилась наиболее полная из всех языков поддержка Unicode), так и в сторонних модулях: написаны фреймворки для эффективной объектно-ориентированной разработки, асинхронного программирования, удобные ORM, и многое, многое другое. Как выразился недавно один комментатор блога о Perl:»This is not your Daddy’s Perl» — «Это не тот Perl, на котором программировал твой папочка» 🙂 Это Modern Perl.

У языка Perl довольно активное комьюнити, которое поддерживает и развивает его. Ежегодно по всему миру проводятся десятки конференций YAPC (Yet Another Perl Conference), воркшопов и технических, а также нетехнических встреч, посвящённых Perl — в том числе и в России (зачастую с участием заграничных гостей). Участие в таких мероприятиях как правило бесплатное.

Кстати, одна из таких конференций будет проводиться совсем скоро, 12-13 мая, в Киеве. Если есть время, возможность и интерес к языку Perl, весьма рекомендую прийти послушать доклады и пообщаться с людьми, использующими этот язык в повседневной жизни. Участие в конференции бесплатное, нужно только зарегистрироваться и подать заявку на участие на сайте конференции.

Плюсы и минусы трех языков программирования: Perl, Python или JS

Выбрать язык программирования для изучения с нуля — проблема, которая волнует многих разработчиков. Как выбрать язык, который не только сможет принести вам деньги, но и доставит удовольствие от работы? Разработчики REG. RU Сергей Сединкин, Александр Ткач и Андрей Макарычев ответят на все интересующие вопросы о трёх популярных языках программирования для веб-разработки: Perl, Python и JS.

Perl

В Интернете встречается мнение, что Perl устаревает и пишут на нём в основном те, кто сталкивается с легаси-кодом. Так ли это?

Легаси-код — код, который писали мамонты предыдущие или сторонние программисты, используя устаревшие языки или технологии.

Сергей Сединкин, старший специалист по решению багов REG.RU:

Отчасти это так. В крупных известных компаниях можно встретить проекты, написанные на Perl. Их надо развивать и поддерживать. Если код подвергался рефакторингу, то он будет отвечать современным стандартам. Работать с таким кодом одно удовольствие. И какая разница, на каком языке программирования он написан?

Что касается новых проектов на Perl. Недавно Владимир Перепелица из Mail.ru участвовал в интервью, где рассказал, что они пишут облако на Perl. И это только новый код и новый проект. Больше примеров не могу привести, потому что не интересовался сторонними проектами.

Александр Ткач, Perl-разработчик REG.RU:

Доля Perl в вебе, безусловно, сократилась в пользу PHP, Node.js и Python. В основном, Perl востребован в компаниях, где кодовая база изначально была написана на Perl-е в те годы, когда альтернативы на бэкенде ему ещё не было. Объём легаси-кода, написанного на Perl-е в топовых IT-компаниях в прошлые годы, большой и требует поддержки. Где-то он переписывается на другие языки программирования (ЯП), а где-то остаётся основным ЯП, в том числе для новых проектов и микросервисов. Я думаю, что, во-первых, процесс миграции с Perl — небыстрый, а во-вторых, рефакторинг и поддержка легаси-кода на больших проектах тоже может дать хороший опыт в программировании, так что в ближайшие лет 5 хоронить Perl пока рано. Кроме того, Perl поддерживается профессиональным сообществом, оно дружное и экспертное. Зачастую найти там ответ на сложный вопрос получится быстрее, чем в больших сообществах по PHP или Python.

Зачем использовать Perl для веба, если есть Python?

Сергей Сединкин:

Большое комьюнити, обширная база открытых модулей на CPAN почти под все задачи. Perl становится менее популярным, значит, количество программистов на Perl будет сокращаться. Из-за этого возрастёт ценность каждого конкретного программиста. Значит, жди почёт и уважение в компании.

Александр Ткач:

Правильнее было бы противопоставить в этом вопросе Perl языку PHP, чья доля в сегменте веб-разработки в разы больше доли как Perl, так и Python. Для простых веб-проектов типа лендингов или блогов смысла в Perl действительно нет — есть готовые решения на PHP (CMS — WordPress, Joomla и другие), а на больших и сложных проектах он может составить конкуренцию другим ЯП. Программирование на Perl дает более глубинные знания, чем программирование на PHP, при этом синтаксис проще, чем у Python, и практически любую задачу можно решить на этом ЯП несколькими способами. Я думаю, что человек, освоивший Perl, сможет затем с лёгкостью перейти на PHP или на Python — они кажутся проще после Perl — и писать при этом качественный код.

Правда ли, что у Perl достаточно сложный синтаксис?

Сергей Сединкин:

При желании на Perl можно написать очень хитрые конструкции. Неподготовленному зрителю будет сложно понять код. Но ведь можно писать и простой код?

Александр Ткач:

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

Что можно делать с Perl в вебе? Какие задачи ждут тех, кто планирует искать работу Perl-разработчиком?

Сергей Сединкин:

Если кратко, то это бэкенд, админские скрипты, отчёты, системные демоны.

Александр Ткач:

На Perl есть веб-фреймворки современного уровня с поддержкой MVP и ORM — Catalyst, Mojo, Dancer, которые не уступают фреймворкам на Python (Django) и PHP (Laravel, Yii). Задачи всё те же, что и на других популярных ЯП для серверного программирования, — разработка бэкенда классических веб-приложений, а также микросервисов, платёжных шлюзов, менеджеров очередей и иногда асинхронных решений.

Python

На вопросы о Python отвечает Сергей Сединкин, старший специалист по решению багов REG.RU.

Хорошо ли начинать изучать программирование с Python, учитывая, что он достаточно высокоуровневый и для него есть множество готовых библиотек? Не будет ли потом недостатка в глубинных знаниях и понимании работы технологий, которые скрыты в Python за абстракциями (например, процесс выделения памяти в программах)?

В современном мире программирование движется в сторону решения бизнес-задач. На современные серверы ставят железо, которое работает достаточно быстро. Куда лучше написать программу, решающую конкретные задачи пользователя и приносящую ему благо, облегчающую жизнь, чем написать программу, которая работает быстро, но никакой пользы не несёт. Если ваш проект разовьётся настолько, что надо будет изучать низкоуровневые штуки, то именно тогда это и стоит делать. Изучить их будет намного проще с уже готовым багажом знаний. У программиста будет представление, где и зачем нужны оптимизации.

Сфер применения Python много: это и веб, и анализ данных, Machine Learning и так далее. Сможет ли новичок переключиться на другую сферу, если одна чем-то не устроит?

Всё зависит от человека и требований проекта. Особых препятствий быть не должно.

Как начинающему программисту сразу применять свои знания Python на практике (применительно к веб-разработке)?

Советую придумать себе задачу и сразу реализовать её. Например, можно поставить себе цель — создать сайт, в котором будет телефонная книга. В книгу можно добавлять, удалять контакты, менять их. Хранение сделать в базе данных.

Что можно делать с Python в вебе? Какие задачи ждут тех, кто планирует искать работу Python-разработчиком?

С Python в вебе можно делать то же самое, что и с другими языками программирования.

JavaScript

На вопросы о JavaScript отвечает Андрей Макарычев, руководитель группы разработки интерфейсов REG.RU.

JavaScript завоевал нишу фронтенда, а для бэкенда в нём, как известно, есть Node.js. Можно ли рассмотреть этот язык как прямой путь к фуллстеку?

Рассматривать JavaScript как полноценный язык для фуллстек-программирования вполне себе можно. И работать с ним даже интересно. Мир ЯП концептуально не так уж и разнообразен, и событийно-ориентированная асинхронная парадигма программирования встречается не так уж часто.

В целом, не стоит относиться к серверному JS легкомысленно. Node.js такой же мощный язык разработки, как и любой другой. А к этому можно прибавить самое активное сообщество, огромный спектр открытых библиотек практически для любых нужд (да-да, даже Data Science и работа с GPU есть). В общем, разрабатывая на нём свой бэкенд-сервис, можно получить полный спектр удовольствия, как и от любого другого языка.

Тут, однако, стоит помнить о нишевости Node.js. Времена хайпа, когда на нём писали всё подряд, прошли, и разработчики стали внимательно относиться к выбору инструментария для своих целей. Но io-bound задачи точно все ваши.

Бытует мнение, что у JavaScript довольно низкий порог вхождения, поэтому, чтобы стать востребованным специалистом, нужно знать дополнительные смежные области. На какие из этих областей вы бы посоветовали обратить внимание новичкам?

Порог вхождения — это такой фетиш разработчиков. Программирование — это не ракетные технологии, не релятивистская физика, и тут полностью исключён человеческий фактор при общении «человек — компьютер», что безусловно упрощает деятельность. Но, как и везде, спектр твоих знаний ограничивает твои возможности. Для приложений типа «hello world» нет трудных языков, а для чего-то более сложного нужно иметь знания, с которыми пересекается твоя сфера профессиональных интересов. В любой ситуации базовыми знаниями являются алгоритмы и структуры данных, чтобы понимать, как работать с данными; и паттерны программирования, чтобы избегать распространённых ошибок. 

Про JavaScript говорят, что он вездесущ. Значит ли это, что на нём при желании можно написать всё что угодно?

Так и есть. Хотя возможно так и было. Волна хайпа давно схлынула, показав сильные и слабые стороны JS. Теперь это отличный инструмент для своей ниши, хотя его ниша до сих пор порождает много холиваров.

Что можно делать с JavaScript в вебе? Какие задачи ждут тех, кто планирует искать работу JavaScript-разработчиком?

Если говорить о чисто клиентском JS — это весь спектр возможных задач: от простейших обработок формочек до построений сложнейших интерфейсов; от элементарных снежинок на экране до крутого (и не очень) геймдева (все же помнят про DOOM и CS-очку в браузере?).

Если про серверный JS: тут ещё больше. Это и BFF, и всякие GraphQL, решение прикладных задач для фронтенда (сборщики, препроцессоры, постпроцессоры и тому подобное), большие серверы на Node.js, маленькие сервисы на Node.js — всё что угодно.

Ещё не стоит забывать про мобильную разработку (всякие pwa и не только), разработку десктопных приложений (Electron и все прочие).

⌘⌘⌘

Если вы уже нашли свой идеальный язык программирования, на котором собираетесь писать сайты или веб-приложения, то самое время выбираться из «локалки» и выбрать надёжный хостинг. Например, в REG.RU все тарифы поддерживают Perl, Python и PHP, а ещё на них есть автоматическая защита от DDoS-атак и две недели бесплатного теста.

Программист Perl — БудуГуру

Программист Perl — БудуГуру

Perl был создан в 1980-е Ларри Уоллом, лингвистом по образованию. Название языка расшифровывается как Practical Extraction and Report Language — «практический язык для извлечения данных и составления отчетов». Таким образом, основной особенностью языка считаются его богатые возможности для работы с текстом, в том числе с регулярными выражениями.

Другая особенность Perl — его способность к адаптации: он может работать, по крайней мере, с двумя десятками различных операционных систем. Кроме того, этот язык гибкий и позволяет достичь цели разными способами. Подходит для начинающих программистов.

Обязанности

Проектирование и разработка

Среди задач, которые может поставить перед Perl-программистом, работодатель:

  • системное администрирование;
  • создание c помощью одноименного языка разработки сервисов, веб-приложений, модулей;
  • проектирование баз данных, работа с ними (составление запросов).
Тестирование и внедрение

В задачи Perl-программиста также входит сопровождение проекта по созданию приложений и сервисов: их тестирование, отладка (в том случае, если обнаружатся ошибки) и, наконец, внедрение — запуск в работу.

Сопровождение и поддержка

Среди других обязанностей программиста:

  • поддержка разработанного им сервиса, приложения, модуля и пр.;
  • составление технических заданий;
  • разработка инструкций по работе с готовым продуктом;
  • оформление необходимой документации.

Что нужно знать и уметь

    Личные качества
  • Аналитический склад ума;
  • Внимательность к деталям;
  • Структурное мышление;
  • Способность к самообучению;
  • Ответственность.
    Основные навыки
  • Опыт работы с Perl;
  • Знание HTML, CSS, JavaScript, а также MySQL, PgSQL будет плюсом;
  • Желательно знание второго языка программирования;
  • Умение составлять и читать ТЗ;
  • Умение разбираться в чужом коде;
  • Навыки работы с большими объемами информации.

Отрасли, в которых востребована профессия

Популярные образовательные курсы

  • Онлайн-курс

    История ЭВМ и программирования

    Программист, ERP-консультант, Программист Java, Программист PHP, Программист Ruby, Программист 1С, Программист C++, Программист Python, Программист Perl, Системный программист

    Этот курс посвящен истории развития ЭВМ и программирования в Советском Союзе в контексте задач, для решения которых они требовались.

    Узнать больше

Все возможности для обучения профессии, литература, онлайн и офлайн курсы, ВУЗовские программы…

Больше курсов

Подписка
на материалы

Мы присылаем интересные материалы и ничего больше



создатель проекта
#

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

Городской тезаурус — поиск синонимов для сленговых слов

Как вы, наверное, заметили, сленговые синонимы слова «термин» перечислены выше. Обратите внимание, что из-за природы алгоритма некоторые результаты, возвращаемые вашим запросом, могут быть только концепциями, идеями или словами, которые связаны с словом «термин» (возможно, незначительно). Это просто из-за того, как работает алгоритм поиска.

Вы также могли заметить, что многие из синонимов или родственных сленговых слов являются расистскими / сексистскими / оскорбительными / прямо ужасающими — в основном это благодаря прекрасному сообществу в Urban Dictionary (не связанному с Urban Thesaurus).Городской тезаурус ползет по сети и собирает миллионы различных сленговых терминов, многие из которых взяты из UD и оказываются действительно ужасными и нечувствительными (я полагаю, такова природа городского сленга). Надеюсь, родственные слова и синонимы для слова «термин» немного более мягкие, чем в среднем.

Городской тезаурус

Городской тезаурус был создан путем индексации миллионов различных сленговых терминов, которые определены на таких сайтах, как Городской словарь. Эти индексы затем используются для нахождения корреляций между сленговыми терминами.Официальный API городского словаря используется для отображения определений при наведении курсора. Обратите внимание, что этот тезаурус никоим образом не связан с Urban Dictionary.

Из-за того, как работает алгоритм, тезаурус дает вам в основном связанных сленговых слов, а не точных синонимов. Чем выше термины в списке, тем больше вероятность, что они имеют отношение к слову или фразе, которые вы искали. Алгоритм поиска достаточно хорошо обрабатывает фразы и строки слов, поэтому, например, если вам нужны слова, относящиеся к lol и rofl , вы можете ввести lol rofl , и он должен дать вам кучу связанных сленговых терминов.Или вы можете попробовать парень или девушка , чтобы получить слова, которые могут означать одно из них (например, bae ). Также обратите внимание, что из-за характера Интернета (и особенно UD) в результатах часто будет много ужасных и оскорбительных терминов.

Еще предстоит проделать большую работу, чтобы этот тезаурус сленга давал стабильно хорошие результаты, но я думаю, что он находится на той стадии, когда он может быть полезен людям, поэтому я его выпустил.

Особая благодарность разработчикам открытого кода, который использовался в этом проекте: @krisk, @HubSpot и @mongodb.

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

Обратите внимание, что Urban Thesaurus использует сторонние скрипты (такие как Google Analytics и рекламные объявления), которые используют файлы cookie. Чтобы узнать больше, см. Политику конфиденциальности.

Кольцо для языка со штангой из 14-каратного золота с культивированным жемчугом — FreshTrends

Измерительные украшения для тела

Как мне узнать, какого размера мой пирсинг?

Это стандартные размеры сексуальных украшений для тела, используемых для каждого пирсинга. Однако мы не можем гарантировать, что размер, указанный в нашей таблице, соответствует размеру , используемого для вашего пирсинга . Это стандартные размеры и длина, используемые профессиональными прошивальщиками. Тело каждого человека разное, и иногда мастера по пирсингу используют разную длину и калибр в зависимости от вашего тела или типа украшений, которые вы хотите носить. Если вы не уверены, какой размер украшения для пирсинга выбрать, мы рекомендуем позвонить своему пирсингу, чтобы спросить его или ее.

Стандартные размеры пробивки
Прокалывание Стандартный калибр Стандартная длина
Кольцо живота / пупка 14 г 3/8 дюйма, 7/16 дюйма
Пирсинг в нос 20 г, 18 г 1/4 дюйма, 5/16 дюйма
Пирсинг языка 14 г 5/8 «
Пирсинг хряща 16 г, 18 г 3/16 дюйма, 1/4 дюйма и 5/16 дюйма
Пирсинг брови 16G (также обычно используется 14G) 1/4 «, 5/16» и 3/8 «
Промышленная штанга 14G (также обычно используется 16G) 1 1/2 «(варьируется)
Губные кольца для губ 14G или 16G 1/4 «, 5/16» и 3/8 «
Монро пирсинг 16 г 1/4 «, 5/16» и 3/8 «
Пирсинг сосков 14 г 3/8 дюйма, 1/2 дюйма, 9/16 дюйма
Козелок / Спираль / Ладья / Раковина / Дейт 16 г, 18 г 3/16 дюйма, 1/4 дюйма, 5/16 дюйма и 3/8 дюйма
Перегородка 14G (также часто используется 16G) 3/8 «, 7/16», 1/2 «и 5/8»
ухо 20G и 18G

Калибр

Какого размера мои украшения для пирсинга?

Таблица размеров вашего пирсинга — это толщина полосы, которая проходит через ваш пирсинг. Другими словами, это толщина штанги. Учтите, что чем толще штанга, тем меньше калибр. Таким образом, штанга 12-го калибра (или 12G) намного толще, чем штанга 20-го калибра (20G).

Длина изделия для пирсинга

Какова длина моих украшений для пирсинга?

Длина вашего украшения для пирсинга означает пригодную для носки длину штанги, которая проходит через пирсинг. Он измеряется от верха до низа прямой штанги и не включает мячи и талисманы.

Диаметр ювелирных изделий для пирсинга

Какого диаметра мои украшения для пирсинга?

Диаметр используется для измерения размеров круглых гантелей, таких как обручи, обруч и круговые. Он измеряется от внутренней и самой широкой точки круга.

Невыпадающие кольца для бисера

Невыпадающие кольца измеряются от наибольшего внутреннего диаметра.

Бисерные кольца

также известны как CBR, BCR и шариковые невыпадающие кольца.Они бывают разных вариаций, форм и размеров, но применяются одни и те же правила измерения. Всегда измеряйте наибольшее значение внутри диаметра круга .

У нас есть пленники разной длины и толщины, подходящие для любого пирсинга. Если вы не можете найти нужный вам размер, свяжитесь с нами.


Штанги прямые

Измерьте длину штанги между двумя мячами по длине штанги, как показано на схеме.

У нас есть штанги разных размеров и длины, чтобы вы могли подобрать идеальный вариант для вашего пирсинга.

Круглые штанги / Подковообразные штанги

Круглые / подковообразные штанги обычно используются в качестве колец для живота, колец для пирсинга сосков, колец для бровей, серег, берушей и для пирсинга гениталий. Круглые штанги измеряются от самого большого внутреннего диаметра.

Все пирсинг разные, поэтому у нас есть большой выбор круглых гантелей из 14-каратного золота любого калибра и длины.

Изогнутые штанги и кольца для пупка

Изогнутые штанги, также известные как изогнутые штанги, обычно используются для изготовления колец пупка, колец для сосков, украшений для бровей, пирсинга ладьи и даже пирсинга перегородки. Изогнутые штанги измеряются по прямой от внутренней длины между двумя мячами.

Мы несем изогнутые штанги 20G — 14G.

Кольца в нос

Стандартный калибр носовых колец — 18G.Скручивания носа, также известные как носовые винты или носовые штифты, измеряются от основания мяча или шарма до начала скручивания, как показано на диаграмме. Измерьте кости носа до конца стержня перед кончиком бусинки. Носовые рыбьи хвосты измеряются от основания мяча или шарма до конца штанги. Чтобы получить дополнительную помощь в выборе подходящего кольца в носу, ознакомьтесь с нашим Руководством по пирсингу и украшениям в носу.

Носим кольца в носу 18G — 20G. От бриллиантовых колец в носу до сапфировых гвоздиков — у нас есть множество красивых стилей из золота и платины на выбор.

Лабретки, кольца для губ, хрящи и серьги козелка

Лабретки, также известные как штанги с плоской спинкой, носят в различных пирсингах вокруг щек и рта, а также в серьгах козелка и шпильках для хряща. Плоская спинка идеально подходит для пирсинга, требующего плотной посадки. Они измеряются от основания мяча до вершины плоского диска. Стандартная длина лабрета — 1/4 дюйма или 5/16 дюйма. 3/16 дюйма обычно используется для пирсинга хряща, а не для пирсинга губ для хорошей и плотной посадки.

У нас есть лабретки разных размеров и стилей.

Заглушки, туннели и серьги Украшения для тела

Носимая длина беруши измеряется от внутреннего края горизонтальной линии, как показано на диаграмме. То же самое относится к ушным вкладышам и украшениям для тела.

Заглушки

производятся различных размеров, конструкций и вариаций.

дюймы и диаграммы преобразования:

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

Измеритель в миллиметры Преобразование
Калибр дюймов Миллиметров
22 г 0,025 0,64 мм
20 г .032 « 0,81 мм
18 г .040 « 1,0 мм
16 г .050 « 1,2 мм
14 г .064 « 1,6 мм
12 г.082 « 2,0 мм
10 г .102 « 2,5 мм
8 г .125 « 3,0 мм
6 г . 162 « 4,0 мм
4G .204 « 5,0 мм
2 г. 250 « 6.0 мм
0 г .312 « 8,0 мм
00 г .375 « 10.0 мм

Преобразование длины и диаметра
дюймов Миллиметров
3/16 « 4,7
1/4 « 6,4
5/16 « 8
3/8 « 9,5
7/16 « 11
1/2 « 13
9/16 « 14
5/8 « 16
3/4 « 19
7/8 « 22
15/16 « 24
1 « 25
1 1/2 « 38

Аудиокнига недоступна | Слышно.

com
  • Evvie Drake: более

  • Роман
  • От: Линда Холмс
  • Рассказал: Джулия Уилан, Линда Холмс
  • Продолжительность: 9 часов 6 минут
  • Несокращенный

В сонном приморском городке в штате Мэн недавно овдовевшая Эвелет «Эвви» Дрейк редко покидает свой большой, мучительно пустой дом почти через год после гибели ее мужа в автокатастрофе. Все в городе, даже ее лучший друг Энди, думают, что горе держит ее взаперти, а Эвви не поправляет их. Тем временем в Нью-Йорке Дин Тенни, бывший питчер Высшей лиги и лучший друг детства Энди, борется с тем, что несчастные спортсмены, живущие в своих худших кошмарах, называют «ура»: он больше не может бросать прямо, и, что еще хуже, он не может понять почему.

  • 3 из 5 звезд
  • Что-то заставляло меня слушать….

  • От Каролина Девушка на 10-12-19

Tongue pearl: новый метод лечения новорожденных со срединной лицевой расщелиной и микроцефалией

DOI: 10. 1016 / j.sdentj.2011.12.002. Epub 2012 9 января.

Принадлежности Расширять

Принадлежность

  • 1 Кафедра ортодонтии, стоматологический факультет, Университет Суэцкого канала, Исмаилия, П.О. Box 3414, New Campus, Ring Road, Egypt.
Бесплатная статья PMC

Элемент в буфере обмена

Шериф Эссам Захра и др. Саудовская Дент Дж. 2012 апр.

Бесплатная статья PMC Показать детали Показать варианты

Показать варианты

Формат АннотацияPubMedPMID

DOI: 10.1016 / j.sdentj.2011.12.002. Epub 2012 9 января.

Принадлежность

  • 1 Кафедра ортодонтии, стоматологический факультет, Университет Суэцкого канала, Исмаилия, П.О. Box 3414, New Campus, Ring Road, Египет.

Элемент в буфере обмена

Полнотекстовые ссылки Опции CiteDisplay

Показать варианты

Формат АннотацияPubMedPMID

Абстрактный

В этом отчете о клиническом случае показано дооперационное лечение пациента со срединной лицевой расщелиной и микроцефалией с использованием устройства для наведения. Устройство было специально разработано и модифицировано с помощью жемчужной акриловой структуры, прикрепленной к его язычной поверхности, для того, чтобы подтолкнуть чрезвычайно выступающий язык обратно в его нормальное положение, чтобы облегчить анестезию и хирургическое закрытие губ. Общее время лечения составило 5 недель. Восстановление нормального положения языка, в свою очередь, облегчило как интубацию, так и экстубацию, предотвратив послеоперационный респираторный дистресс, который авторы испытали в аналогичных случаях.

Ключевые слова: Прибор наведения; Срединная расщелина лица; Микроцефалия; Дооперационное ортодонтическое лечение.

Цифры

Рисунок 1

(A) Фотография лица перед обработкой, показывающая…

Рисунок 1

(A) Фотография лица перед лечением, показывающая широкую срединную расщелину верхней губы и…

фигура 1

(A) Фотография лица перед лечением, показывающая широкую срединную расщелину верхней губы и сильно выступающий язык. (B) Предварительный вид внутри ротовой полости, показывающий альвеолу расщелины.

Рисунок 2

Пластина из модифицированного акрила, включая нержавеющую…

Рисунок 2

Модифицированная акриловая пластина, включая выносные опоры из нержавеющей стали.

фигура 2

Модифицированная акриловая пластина, включая выносные опоры из нержавеющей стали.

Рисунок 3

Пациент носит модифицированный прибор.

Рисунок 3

Пациент носит модифицированный прибор.

Рисунок 3

Пациент носит модифицированный прибор.

Рисунок 4

Фотография лица после обработки, показывающая улучшение…

Рисунок 4

Фотография лица после лечения, показывающая улучшение положения языка.

Рисунок 4

Фотография лица после лечения, показывающая улучшение положения языка.

Рисунок 5

Фотография лица…

Рисунок 5

Фотография лица пациента после закрытия губы.

Рисунок 5.

Фотография лица пациента после закрытия губы.

Похожие статьи

  • Клинические результаты с использованием аппарата «Modified Latham» для дооперационной детской ортопедии у пациентов с односторонней полной расщелиной губы и неба.

    Jodeh DS, Ruso S, Feldman R, Ruas E, Rottgers SA. Jodeh DS и др. Cleft Palate Craniofac J. 2019 августа; 56 (7): 929-935. DOI: 10.1177 / 1055665618816892. Epub 2018 9 декабря. Краниофак Нёба J. 2019. PMID: 30526003

  • [Предоперационное ортопедическое лечение расщелины губы и неба].

    Дельгадо, доктор медицины, Марти Э, Романс А, Ромеро М, Лагарон Э, Сальван Р., Эрреро Э.Дельгадо, доктор медицины и др. Cir Pediatr. 2004 Янв; 17 (1): 17-20. Cir Pediatr. 2004 г. PMID: 15002720 Испанский.

  • Аппарат Латама для предоперационной репозиции выступающей верхней челюсти при двусторонней заячьей губе и нёбе.

    Горький К. Горький К. J Craniomaxillofac Surg. 1992 Апрель; 20 (3): 99-110. DOI: 10,1016 / s1010-5182 (05) 80091-5. J Craniomaxillofac Surg.1992 г. PMID: 1613111

  • Аппарат для дооперационной ортопедии: Техника Латама.

    Круз К. Круз К. Оральный Maxillofac Surg Clin North Am. 2016 Май; 28 (2): 161-8. DOI: 10.1016 / j.coms.2016.01.004. Оральный Maxillofac Surg Clin North Am. 2016 г. PMID: 27150303 Рассмотрение.

  • Последние достижения в области предоперационного моделирования расщелины губы и неба.

    Аминпур С, Толлефсон ТТ. Aminpour S и др. Curr Opin Otolaryngol Head Neck Surg. 2008 августа; 16 (4): 339-46. DOI: 10.1097 / MOO.0b013e3283079c7b. Curr Opin Otolaryngol Head Neck Surg. 2008 г. PMID: 18626253 Рассмотрение.

LinkOut — дополнительные ресурсы

  • Источники полных текстов

  • Другие источники литературы

Pearl Awakening Tongue Drum PMTD8GM687

НАЖМИТЕ И СОБИРАЙТЕ
Закажите и получите в магазине в тот же день. Ваш заказ будет готов к получению в течение 1-2 часов, вы получите обновление заказа, когда он будет готов.

Пожалуйста, принесите подтверждение заказа, вашу дебетовую / кредитную карту, которая использовалась для оплаты, и одну форму удостоверения личности (она должна совпадать с платежным адресом карты).

ДОСТАВКА
Заказы на сумму более 50 фунтов стерлингов бесплатны для доставки на адреса материковой части Великобритании с понедельника по пятницу. Также доставляем в субботу или воскресенье (за дополнительную плату). Для заказов за пределами материковой части Великобритании добавьте товары в корзину и выберите свой регион, чтобы просмотреть стоимость доставки.

Мы стремимся отправлять все заказы в тот же день в Великобританию и остальные страны Европы. Сроки доставки являются приблизительными и не включают субботу или воскресенье, пожалуйста, позвольте дополнительное время, когда товары находятся в пути в выходные. Если вы хотите отслеживать прогресс своего заказа, свяжитесь с нами, чтобы получить номер для отслеживания вашего заказа (если вы не получили его автоматически).

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

ДОСТАВКА В ЖЕ ДЕНЬ
Мы рады, что можем предложить услугу доставки в тот же день с одночасовыми временными интервалами (с понедельника по субботу) в районе Лондона в дневное и вечернее время. Если вы хотите обновить свой заказ до этого, пожалуйста, напишите по электронной почте или позвоните нам до 13:00, и мы проверим, покрывается ли ваша территория. За обновление может взиматься плата в зависимости от стоимости вашего заказа и вашего почтового индекса.

* ПРЕДВАРИТЕЛЬНЫЙ ЗАКАЗ ДОСТАВКИ И КОЛЛЕКЦИИ
Вы ​​можете предварительно заказать товары, которых в настоящее время нет в наличии, для доставки или получения в магазине. Мы свяжемся с вами, когда ваш заказ будет готов к отправке или получению. Если товар отсутствует на складе у нашего поставщика и доставка займет больше времени, мы свяжемся с вами и сообщим предполагаемую дату доставки / получения. Вы можете выбрать, принять ли эту дату или отменить заказ, чтобы получить полный возврат средств.

ВОЗВРАТ
Если вы не удовлетворены своей покупкой в ​​Интернете, вы можете вернуть товар в течение 10 дней для возврата или обмена.Товар должен быть в оригинальном состоянии и в упаковке и сопровождаться действующим чеком. Мы не можем вернуть деньги или обменять их без квитанции. Возврат не включает стоимость перевозки и должен быть возвращен (за ваш счет) с использованием службы доставки с отслеживанием и подписью.
Мы не можем предоставить возмещение, кредит или обмен на товары, которые не находятся на нашем складе и, следовательно, сделаны по заказу для вас или отправлены производителем.

Запонки с нарезанным языком и жемчугом — Парфянские книги

‘Эти стихи заставят ваше сердце сжаться; сформируйте комок в горле, который будет сломан неожиданным хихиканьем в адрес остроумия Беллтри.
Коллекция рисует, пожалуй, одно из самых запоминающихся, но в то же время острых изображений реальной жизни, которые я когда-либо испытывал в поэзии. Беллтри почти жестока в своей неприятной и злобной аутентичности, но это то, что делает поэзию такой трогательной. Это неудобно, это мешает, и именно поэзия, несомненно, изменит ваше восприятие современной реальности ».
— Джорджия Фирн, New Welsh Reader

Запонки с нарезанным языком и жемчугом предлагает читателю прекрасные стихотворения, в которых содержится до сих пор замалчиваемая личная история.Беллтри присоединяется к традиции женщин-писательниц, которые бросают вызов родительскому повелению и бросают вызов шраму на языке, чтобы говорить красноречиво и с образцовой силой духа ».
— Хелен Мэй Уильямс
«С драматической уравновешенностью и своевременностью стихи Китти Беллтри манят читателя проследить за ее проницательным, непоколебимым взглядом, когда она исследует определения дома и наши отношения с людьми и предметами, заключенными в четырех стенах.
Поочередно остроумно и изощренно, ее сочинение дрожит от внушающей тревогу нотки беспокойства.’
— Саманта Винн-Риддерч

В своей дебютной коллекции Китти Беллтри исследует разорванные связи между собой, семьей и домом. В основе этих стихов — сложные отношения дочери с матерью, которая выросла в национал-социалистической Германии, и ее отцом-наполовину японцем, который выжил три года в качестве военнопленного в Чехословакии. Этим мрачным темам уравновешиваются моменты комической абсурдности и восхитительного домашнего хаоса.

Китти Беллтри родилась на юге Лондона и живет в Уэльсе.Ее стихи и рассказы были опубликованы в Orbis , The North , Under the Radar , Я не молчаливый поэт , Poetry Wales , New Welsh Review , The Lampeter Review и Хрупкая звезда . Она была получателем литературной стипендии Уэльса, вошла в шорт-лист Венчурной премии и получила высокую оценку на Валлийском международном поэтическом конкурсе, фестивале поэзии PENfro, поэтическом конкурсе Камдена и Люмена и премии читателей Orbis.

В обработчике ошибок возникла необработанная исключительная ситуация.

 / products / 28860 /% 3Fgroupid = 118494 & categoryid = 16031 & adviceource = categorybrowse 
 System.NullReferenceException: ссылка на объект не установлена ​​на экземпляр объекта.
   в Stuller.Com.Web.Controllers.ActionFilters.ShowLiveHelpAttribute.OnActionExecuting (ActionExecutingContext filterContext) в D: \ a \ Web \ Web \ app \ Web.Controllers \ ActionFilters \ ShowLiveHelpAttribute.cs: строка 35
   в System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter (фильтр IActionFilter, преконтекст ActionExecutingContext, продолжение Func`1)
   в System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter (фильтр IActionFilter, преконтекст ActionExecutingContext, продолжение Func`1)
   в System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter (фильтр IActionFilter, преконтекст ActionExecutingContext, продолжение Func`1)
   в System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter (фильтр IActionFilter, предварительный контекст ActionExecutingContext, продолжение Func`1)
   в System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter (фильтр IActionFilter, преконтекст ActionExecutingContext, продолжение Func`1)
   в System.Web.Mvc.ControllerActionInvoker.InvokeAction (ControllerContext controllerContext, String actionName)
   в System.Web.Mvc.Controller.ExecuteCore ()
   в System.Web.Mvc.ControllerBase.Execute (RequestContext requestContext)
   в Stuller.Com.ApplicationServices.ExceptionHandler.HandleException (исключение исключения, IErrorController errorController) в D: \ a \ Web \ Web \ app \ ApplicationServices \ ExceptionHandler.cs: строка 133 

Исходная ошибка

 System.Web.HttpException (0x80004005): A от клиента обнаружено потенциально опасное значение Request.Path (?).
 в System.Web.HttpRequest.ValidateInputIfRequiredByConfig ()
 в System.Web.HttpApplication.PipelineStepManager.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *