От простого к сложному
Прежде чем приступить к последовательному ознакомлению с не знакомым для вас языком, должен оговориться и сказать, что все примеры да и сам язык описанию которого посвящена эта книга это Perl версии 5.003 для операционной системы FreeBSD версии 2.01. Существуют реализации этого языка для операционных систем OS/2 , MS-DOS и Windows NT но они немного отстают по возможностям от оригинала, рожденного в недрах Unix.
Пример 1.
Введите в файл test1.pl следующие строки:
#!/usr/local/bin/perl # Содержимое файла test1.pl print «Наше Вам с кисточкой!n»;
А теперь подробно разберем каждую строку.
#!/usr/local/bin/perl
Данная строка должна быть первой в любой Perl-программе. Она указывает системному интерпретатору что данный файл — это Perl-программа.
# Содержимое файла test1.pl
Эта строка называется комментарием. Она всегда начинается символом ‘#’ и заканчивается таким объяснением что как говорил великий Ходжа Насреддин «это тонкий философский вопрос», а говоря простым языком здесь можно писать все что угодно. Даже пожелание руководству. Уж здесь оно точно до него не дойдет.
С прекрасного Perl на ужасный JavaScript. Как это было [ru] / Виктор Турский
print «Наше Вам с кисточкой!n»;
Самая последняя ну и конечно главная. Она просто выводит на экран надпись «Наше Вам с кисточкой!».
Здесь слово print — это команда «вывести». Все что в кавычках — это символы, n — перевод строки и ‘;’ — признак конца команды. Он обязателен. В одной строке может быть несколько команд и все они должны завершаться символом ‘;’. После него может быть символ ‘#’ — это значит остаток строки считается комментарием.
Над этой строкой автору пришлось больше всего поломать голову так как в нее постоянно лезли какие то странные «hello», «hello all», «Построимся и спасемся», «Строй наше спасение» и т. д. и т.п.
Если вы никогда не работали с Perl, то бьюсь на спор в 10$, что данная программа сразу у вас не заработает! Не потому что она не верна, а потому что «Нельзя объять необъятное». Сразу, потом можно, да и то частями. Сначала сделайте ваш файл test1.pl исполняемым. Для этого введите команду:
chmod +x test1.pl
Затем проверьте где у вас Perl. Для этого введите:
which perl
Система вам выдаст что то вроде: /usr/bin/perl
Если:
perl: Command not found.
То тогда закройте книжку и ложитесь спать. У вас просто нет Perl или он не установлен. А мне остается послать вас к системному администратору или к man (для переводчиков- man сокращение от manual а не то что вы подумали).
Теперь проверьте что бы строка 01 содержала то что выдала команда which. Если совпало то введите:
test1.pl
и бьюсь на 50$, что и теперь программа не заработает, так как правильней ввести:
./test1.pl
Если я проиграл, то не радуйтесь. Да же если вам удалось запустить программу как test1.pl это значит, что у вас будут неприятности в будущем.
Пример 2.
Данная программа выводит на экран все ваши секреты. А именно файл /etc/passwd.
Обзор языка программирования Perl. Особенности языка программирования Perl.
#!/usr/local/bin/perl open(PASS, «$ARGV»); select(ARGVOUT); $oldargv = $ARGV; > s/foo/bar/; > continue < print; # this prints to original filename >select(STDOUT);
В кратце поясню, что происходит, когда вызываются строки perl -i.bak -pe «код» . Например, мы вызываем:
perl -i.bak -pe «s/foo/bar/» test.txt
Файл test.txt переименовывается в файл test.txt.bak, и создаётся новый файл test.txt. Потом в каждой строке исходного файла заменяется foo на bar, которые записываются в новый фалй test.txt (по-видимому, хоть файл и переименовали, мы всё равно имеем доступ к его строкам?)
Допустим, нужно в файле заменить rn на n:
perl -i.bak -pe ‘s/rn/n/’ test.txt
В результате этого кода получатся два файла: один — test.txt.bak, который является копией исходного, другой — test.txt, где rn заменено на n.
Примечание. Если вы посмотрите внимательно на программу выше ( $extension = ‘.bak’; . ), то увидите, что если вызывать вот так: perl -ibak_*…, то бэкапный файл будет называться «bak_test.txt», то есть если есть звёздочка в значении параметра i, то это это значение расматривается не как расширение, а как шаблон, где звёздочка обозначает имя файла.
Флаг -M позволяет подключать модули
Например, я хочу узнать где лежит модуль CGI:
perl -MCGI -le «print $INC»
perl -MCGI -le «print $INC»
Недавно мне понадобилось сделать chmod a+x всем файлам с расширением «.cgi»,
но на сервере флаг -R для chmod почему-то не работал, так вот что я сделал, что-то подобное:
perl -MFile::Find -e ‘finddepth(sub , «.»>)’ | grep -P ‘.cgi$’ | perl -nle ‘`chmod a+x $_`’
Этим кодом «perl -MFile::Find -e ‘finddepth(sub , ».»>)'» Я вызвал функцию finddepth модуля File::Find, которая рекурсивно обошла текущую директорию и вывела полные пути файлов.
Потом грепом я взял только те файлы, которые оканчиваются на ‘.cgi’ (-P означает, что используются перловые регулярные выражения), а следующей программой «perl -nle ‘`chmod a+x $_`’» я сделал права на выполнение найденым файлам.
Хотя этот код я мог бы записать так:
perl -MFile::Find -e ‘finddepth(sub , «.»)’
Заметьте, что надо использовать флаг -l, чтобы в $_, попало имя файла без «n»
А что если надо подключить некоторые переменные или подпрограммы из подключаемого пакета в пакет main?
Тогда надо писать:
perl -MModule=foo,bar -e ‘. ‘;
perl ‘-Mmodule qw(foo bar)’ -e ‘. ‘;
BEGIN и END
Можно использовать BEGIN и END, для действий, которые должны происходить в начале и в конце, аналогично как у awk.
perl -e ‘BEGIN>;;END’;
Например выведем линии, состоящие из 40 знаков » perl»>dir /b | perl -pe «sub line ;BEGIN;END»
Дебаг
Чтобы дебажить однострочные программы надо подключать модуль B::Deparse,
Если вы запустите:
perl -MO=Deparse -ne «print 1»
То получите вывод:
LINE: while (defined($_ = )) < print 1; >-e syntax OK
модуль B::Deparse нужно подключать так: «-MO=Deparse», а не так: «-MB::Deparse». Видимо это сделано для того, чтобы чётко определить, что мы хотим использовать этот модуль для вывода исходного кода программы, а не просто для использования каких его либо методов в программе.
Вот так модуль B::Deparse будет использоваться как обычный модуль, вывода кода не будет:
perl -MB::Deparse -e «print 1»
В примерах выше я использовал MO=Deparse для вывода кода программ.
Примеры однострочных программ
Вывод количества строк в файле (аналог Юниксовского wc -l)
perl -ne ‘>< print $.’ abc.txt
Эквивалентная программа:
LINE: while (defined($_ = ))
Здесь использован хитрый приём «>
Вывод двоичного числа
perl -e «printf ‘%b’, shift» 200
Замена rn на n в файле
perl -i.bak -pe ‘s/rn/n/’ file.txt
Примечание. Почему-то подобный код не работает в Винде: она упорно добавляет rn, я делал binmode ARGV,
binmode $ARGV, binmode *ARG, но ничего не помогало, буду биться дальше. Буду благодарен вам, если напишите как заменить rn на n в Винде.
Преобразование IP адреса из формы «цифры-точки» в число:
perl -e «print unpack(‘N’, pack(‘C4’, split /./, shift))» 127.0.0.1
Удаление папок .svn в текущей папке и её подпапках (рекурсивно)
perl -MFile::Find -MCwd -e ‘$path = getcwd;finddepth(sub , «$path»)’ | grep ‘.svn$’ | perl -ne ‘system(«rm -rf $_»)’;
тоже самое для Windows:
perl -MFile::Find -e «finddepth(sub< print $File::Find::name . «n»; >, ‘.’)» | perl -ne «print if /.svn$/» | perl -pe «s|/|\|g» | perl -ne «system(«rd /s /q $_»);»
Вывод IP-aдреса в шестнадцатеричной форме
perl -e «printf ‘%02x’ x 4, split /./, shift» 127.0.0.1
Добавление строки «#!/usr/bin/perl» в начало файла
perl -i.bak -pe «print «#!/usr/bin/perln» if $. == 1″ abc.pl
Для Линукса/Юникса:
perl -i.bak -pe ‘print «#!/usr/bin/perln» if $. == 1’ abc.pl
Зачем это надо?
Как и обещал напишу, зачем это всё надо. Вы можете сказать, что есть find, awk, grep, sed, зачем однострочный Perl?
Ну во-первых, в Винде, по-умолчанию, грепа и awk нету. Да конечно быстрее пользоваться grep для отбора строк, но что если надо сделать чуть по-больше, например переименовать файл? Вы скажете есть ведь find, да есть. Так что же я скажу в защиту однострочного перла?
Во-первых, если программируешь на Perl, то Perl помнишь очень хорошо и можешь сразу начать писать однострочную программу, не заглядывая в man. (Поначалу, правда, может быть немного не привычно, но когда втянешься, будет легко)
Во-вторых, бывает удобно использовать именно Perl. Например, когда я хочу иметь аналог awk (смотри флаг -a) с мощью Perl (например хочу использовать в однострочной программе функции pack, unpack или регулярные выражение Perl)
В-третьих,
Perl — мощный язык. Однострочная программа на perl — это обычная программа на Perl, только в командной строке. А значит однострочные программы на перл можно использовать для самых разных задач! (Но думаю, длинные однострочные программы, наверно, лучше не писать, лучше сделать обычный перловый скрипт).
Заключение
Не подумайте только, что я призываю отказаться от grep, find, sed или awk. Не призываю! Я сам продолжаю использовать grep, find. Просто я хотел рассказать о ещё одном полезном инструменте как «однострочный перл», который удобен для тех кто программирует на Perl, ибо: 1) не надо читать man (ты и так всё помнишь), 2) используется мощь Perl
Спасибо за внимание. Тех кто заинтересовался отсылаю сюда:
Советую гуглить перловые однострочные программы с словом: one-liners
обн:
Чтобы заменить rn на n в Винде, надо просто написать:
perl -i.bak -ple «s/r|n//g;binmode ARGVOUT» file.txt
обн:
Добавил в код от AntonShcherbinin, «s/r|n//g;», а то в Линуксе просто binmode не прокатывает, теперь этот код универсален: работает и в Винде, и в Линуксе.
обн (26.08.2012):
Переписал примеры кода под теги
Источник: habr.com
Быстрый старт в 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 Worldn»;
Сохраните эту строку в файле hello.pl и запустите только что созданную вами программу командой:
perl hello.pl
Однако прежде убедитесь, что исполняемые файлы Perl есть среди ваших переменных среды (переменных окружения), а также в том, что вы вызывается perl из папки с исходным файлом hello.pl . В случае успеха, вы увидите ожидаемое «Hello, world!»
Поздравляем, вы начали писать на Perl!
А дальше — в путь…
Отличное англоязычное руководство по языку программирования Perl для быстрого старта вы можете найти на сайте tutorialspoint.com. Помимо этого, существует официальный обучающий ресурс — learn.perl.org.
Среди русскоязычных руководств отметим перевод мультиязычного Учебника Perl. В нем переведены не все главы, однако в качестве основы ресурс вполне пригоден.
Если же вам не по душе изучение посредством чтения, вы можете посмотреть видео-уроки на YouTube в составе следующих плейлистов:
- Perl Tutorial (англ. яз., 125 видео);
- Perl Complete Tutorial (англ. яз., 53 видео);
- Great Perl Tutorial For Begginers (англ. яз., 40 видео).
Естественно, вам не обойтись без официальной документации. Скачать оффлайн-версию в HTML и PDF формате можно на этой странице.
Среди книг для начала и продолжения обучения отметим:
- «Изучаем Perl», Рэндал Л. Шварц, Том Феникс, Брайан Д Фой (июнь 2011);
- «Modern Perl», chromatic (2014).
Список рекомендуемых к прочтению книг вы можете найти также здесь.
Спасибо за внимание и успехов в изучении Perl!
Следите за новыми постами по любимым темам
Подпишитесь на интересующие вас теги, чтобы следить за новыми постами и быть в курсе событий.
Поделиться
Реклама на Tproger: найдем для вас разработчиков нужного стека и уровня.
Курс «SQL-Injection Master»
Старт 10 июля, 3 месяца, онлайн, от 11 997 до 35 990 ₽ в месяц
Курс «Анализ защищенности приложений Android»
Старт 10 июля, 3 месяца, онлайн, от 16 664 до 49 990 ₽ в месяц
Что думаете?
Комментирую от имени компании
Показать все комментарии
Фотография
Обсуждают сейчас
вот именно. Для 1 автомата 2 неправильные этикетке. Вот если бы было сказано, что «ПЕРЕПУТАНЫ» между собой три РАЗНЫХ, то вы были бы правы, а так прав Андрей. А «не те» — это может быть, что всего два названия
10 логических задач с собеседований, которые заставят застрелиться
2 часа назад
Л — логика.Короткий ответ: не нужна. Развёрнутый ответ: «Математика в программировании всё же есть, но на базовом уровне» . «Более сложная математика тоже бывает нужна».Статья хорошая, если рассматривать как рекламу школы (давайте объясним новичкам, что программирование это легко и весело, а то они боятся математики и не хотят к нам на курсы). А по сути — вводит людей в заблуждение. И окрылённые лёгкостью программирования выпускники недоумевают, чего это собеседование заканчивается после 3 минут общения с техлидом?Да, для того, чтобы накидать в редакторе интерфейс мобильного приложения и повесить обработчики событий кандидатская по физ-мату не потребуется. Но в основе программирования лежит алгоритмизация, а это — прикладная математика в чистом виде.Хотите волшебных айтишных зарплат — снимите розовые очки и готовьтесь к математике. Она понадобится и чем дальше — тем больше (любопытства ради погуглите «О собеседованиях на 700к/месяц»)
Источник: tproger.ru