- PVSM.RU - https://www.pvsm.ru -
В связи с тем что дефицит кадров в ИТ отрасли велик, а перловиков совсем мало (а те что есть уже хотят быть техдирами и получать много денег) многие конторы с радостью берут способную молодёжь для превращения в перловиков.
Компания в которой я сейчас работаю тоже об этом задумалась и я вспомнил свою идею набросать некую шпаргалку-карту для начинающих шеф-поваров по приготовлению перловой каши.
Сразу хотелось бы отмести разговоры о смерти перла, вроде где-то тут [1] не помню кто писал, что если технология перестала быть модной и кажется мёртвой, то это означает, что технология зрелая, понятна её область применения и нужно идти и работать, а не трещать языками.
Perl 6 считаю другим языком и его долгое и мучительно рождение не мешает жить и развиваться перлу.
Конечно бывает что технологии умирают, однако если посмотреть на даты в истории коммитов в репозитории [2] перла и даты в ленте заливки/обновления [3] дополнительных модулей, то не скажешь что перл зачах — жизнь кипит ежедневно. Как-то я специально мониторил модули на CPAN [4] — десятки модулей обновляются/заливаются ежедневно.
Также отмечу что весь свободный софт, и перл не исключение, делается для Unix-подобных ОС, на винде всё это можно делать, но не нужно, рекомендую сразу осваивать нормальную для девелопера ОС (GNU/Linux, FreeBSD).
Как обычно всё будет в шпаргалочном стиле, ссылки будут в основном на официальные доки, всяких док для быстрого старта полно в сети:
— Ньютон говорил что он увидел дальше, потому что стоял на плечах гигантов, имея ввиду Галилея и других. Таким образом Ньютон намекал разработчикам не писать, то что уже написано. А то что уже написано для перла обычно лежит на CPAN [5], ставить это можно как из репозитория вашего дистрибутива (но там обычно есть не всё), так и родной утилитой cpan и её вариациями cpanp, cpanm. Писать своё конечно можно, но только если текущие реализации чем-то не устраивают или хочется хорошо понять как это работает.
— И хотя о необходимости отладчика нет единого мнения, отладчик в перле есть, и желательно хотя бы минимально владеть им: perl -d имя_скрипта
— Померить производительность кода можно с помощью модуля Devel::NYTProf [6], на эту тему есть презентация [7] (для поиска утечек памяти тоже есть модули, но не знаю какой сейчас правильный)
— для модульного тестирования есть Test::More [8] и mock модули типа Test::MockObject [9], ну и пара статей: про mock [10] и нефункциональные тесты [11].
— Минимальный заголовок перлового скрипта/модуля
use strict;
use warnings;
use utf8;
use open (:utf8 :std);
use v5.16;
Есть модули для того чтобы одной строкой подключить всё что нужно (Modern::Perl [12], uni::perl [13], common::sense [14]), но они подключают разный набор модулей — мне например отключение undefined варнингов не подходит, но нет никакой проблемы сделать свой модуль.
— нужно понимать как перл работает с utf-8 (точнее хотя бы знать что не всё так просто) — дока [15], статья [16] (в конце статьи ссылка на ещё одну статью)
— стоит знать и юзать хорошие практики [17] и нарушать только понимая почему и зачем, утилита perlcritic
может подсказать где отступили от «священного писания» (надеюсь не оскорбил никаких верующих)
— стиль кодирования это отдельная тема, за основу нужно брать этот документ [18]. Утилита perltidy
умеет приводить стиль кодирования к описанному в конфигурации = ей можно быстро причесать чей-то криво форматированный код.
— перл имеет достаточно удобную документацию, которой можно пользоваться и без коннекта к сети:
perldoc -f имя_функции
perldoc perlre
perldoc perlvar
и т.д.
Понятно что то же самое есть в красивом виде в сети: perldoc [19], для запоминания всяких особенностей возможно будет полезна такая шпаргалка [20], или расширенная шпаргалка [21] и шпора по ссылкам [22], также всегда может помочь сообщество [23], в частности есть рассылка московских перловиков [24].
— создание модулей описано в документации [25], хотя думаю сейчас их чаще делают в ООП стиле, читать тут [26] и тут [27].
— документирование — POD [28]
— свои модули разумно оформлять также как модули для CPAN (вполне вероятно что туда их и будете заливать), для упрощения это процедуры есть куча модулей типа ExtUtils::MakeMake [29] и Module::Starter [30] (ещё есть Dist::Zilla [31], но он без инсталлятора)
— Обработка исключений это eval (они имеет две формы, одна с аргументом-строкой это именно eval, а вторая с аргументом-кодом это уже больше try), есть неплохой вариант Try::Tiny [32].
— модуль Carp [33] предоставляет аналоги warn и die со значительно более информативным выводом.
— Однострочки позволяют вам быстро сделать что-то небольшое, например проверить есть ли модуль в системе perl -E 'use SOAP::Lite'
.
— вывести сложную структуру в лог/на экран можно модулем Data::Dumper [34], Data::Dump [35] немного красивше, JSON::XS [36] много быстрее и больше подходит для маршалинга [37], но и для отладочного вывода можно использовать.
— неплохой формат для конфигов YAML [38], модуль YAML::XS [39].
— Бывает нужно понять от каких модулей зависит скрипт/модуль, тот могут пригодится модули типа Module::ScanDeps [40]
— самый актуальный на данный момент web-framework Mojolicious [41].
— валидировать параметры функции можно готовыми модулями, например Params::Validate [42].
— для логгирования есть готовые модули, например Log::Log4perl [43], Log::Dispatch [44] и универсальная обёртка над разными логгерами Log::Any [45].
— для разбора параметров командной строки есть модуль Getopt::Long [46].
— IDE? настраивайте vim, emacs или любой иной продвинутый консольный редактор, не нужно монстров.
— базовая книга это «Programming Perl» Larry Wall, Tom Christiansen, Jon Orwant она же книга с верблюдом, если хочется понимать больше «Advanced Perl Programming» Sriram Srinivasan.
Про понятные названия, разумные размеры функций и т.п. тоже нужно говорить, но это не привязано к перлу и уже много раз сказано, посему не здесь.
Конечно, как обычно, ожидаю помощи коллективного разума — устал уже вспоминать что ещё по крупному нужно, а в мелочи ударяться не хочется.
Автор: worldmind
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/perl/17083
Ссылки в тексте:
[1] тут: http://blogs.perl.org/
[2] репозитории: http://perl5.git.perl.org/perl.git
[3] ленте заливки/обновления: http://search.cpan.org/uploads.rdf
[4] CPAN: http://www.cpan.org/
[5] CPAN: http://search.cpan.org/
[6] Devel::NYTProf: http://search.cpan.org/perldoc/?Devel::NYTProf
[7] презентация: http://www.slideshare.net/Tim.Bunce/develnytprof-v4-at-yapceu-201008-4906467
[8] Test::More: http://search.cpan.org/perldoc/?Test::More
[9] Test::MockObject: http://search.cpan.org/perldoc/?Test::MockObject
[10] про mock: http://habrahabr.ru/post/142667/
[11] нефункциональные тесты: http://habrahabr.ru/post/111655/
[12] Modern::Perl: http://search.cpan.org/perldoc/?Modern::Perl
[13] uni::perl: http://search.cpan.org/perldoc/?uni::perl
[14] common::sense: http://search.cpan.org/perldoc/?common::sense
[15] дока: http://perldoc.perl.org/utf8.html
[16] статья: http://habrahabr.ru/post/53578/
[17] хорошие практики: http://en.wikipedia.org/wiki/Perl_Best_Practices
[18] этот документ: http://perldoc.perl.org/perlstyle.html
[19] perldoc: http://perldoc.perl.org/
[20] шпаргалка: http://search.cpan.org/perldoc/?perlcheat
[21] расширенная шпаргалка: http://www.cheatography.com/mishin/cheat-sheets/perlcheat/
[22] шпора по ссылкам: http://michaelgoerz.net/refcards/perl_refcard.pdf
[23] сообщество: http://www.pm.org/
[24] рассылка московских перловиков: http://moscow.pm.org/
[25] документации: http://perldoc.perl.org/search.html?r=no&q=perlmod
[26] тут: http://perldoc.perl.org/perlootut.html
[27] тут: http://perldoc.perl.org/perlobj.html
[28] POD: http://perldoc.perl.org/perlpod.html
[29] ExtUtils::MakeMake: http://search.cpan.org/perldoc/?ExtUtils::MakeMaker
[30] Module::Starter: http://search.cpan.org/perldoc/?Module::Starter
[31] Dist::Zilla: http://search.cpan.org/perldoc/?Dist::Zilla
[32] Try::Tiny: http://search.cpan.org/perldoc/?Try::Tiny
[33] Carp: http://search.cpan.org/perldoc/?Carp
[34] Data::Dumper: http://search.cpan.org/perldoc/?Data::Dumper
[35] Data::Dump: http://search.cpan.org/perldoc/?Data::Dump
[36] JSON::XS: http://search.cpan.org/perldoc/?JSON::XS
[37] маршалинга: http://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%80%D1%88%D0%B0%D0%BB%D0%B8%D0%BD%D0%B3
[38] YAML: http://ru.wikipedia.org/wiki/YAML
[39] YAML::XS: http://search.cpan.org/perldoc/?YAML::XS
[40] Module::ScanDeps: http://search.cpan.org/perldoc/?Module::ScanDeps
[41] Mojolicious: http://mojolicio.us/
[42] Params::Validate: http://search.cpan.org/perldoc/?Params::Validate
[43] Log::Log4perl: http://search.cpan.org/perldoc/?Log::Log4perl
[44] Log::Dispatch: http://search.cpan.org/perldoc/?Log::Dispatch
[45] Log::Any: http://search.cpan.org/perldoc/?Log::Any
[46] Getopt::Long: http://search.cpan.org/perldoc/?Getopt::Long
Нажмите здесь для печати.