Как написать программу perl

От простого к сложному

Прежде чем приступить к последовательному ознакомлению с не знакомым для вас языком, должен оговориться и сказать, что все примеры да и сам язык описанию которого посвящена эта книга это 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, то это это значение расматривается не как расширение, а как шаблон, где звёздочка обозначает имя файла.

Читайте также:
Программа nero burning rom получила свое название благодаря императору нерону

Флаг -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

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

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru